blun-king-cli 9.0.0 → 9.1.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 (238) hide show
  1. package/LIESMICH.txt +32 -13
  2. package/README.md +39 -20
  3. package/bin/blun.js +248 -160
  4. package/bin/core-bootstrap.js +47 -0
  5. package/bin/king.js +277 -1
  6. package/bin/launcher-mode.js +15 -3
  7. package/bin/launcher-runtime.js +293 -0
  8. package/bin/plugin-bootstrap.js +11 -4
  9. package/bin/private-paths.js +1577 -10
  10. package/bin/update-lease.js +399 -0
  11. package/bin/update-notice.js +1245 -0
  12. package/blun.mjs +26606 -25239
  13. package/dist-web/assets/{CodeBlockNode-Bsvp6ZEy.js → CodeBlockNode-CXnTLMNr.js} +1 -1
  14. package/dist-web/assets/{CodeBlockShell.vue_vue_type_style_index_0_lang-ta7hLjia.js → CodeBlockShell.vue_vue_type_style_index_0_lang-CCF8Ntnq.js} +1 -1
  15. package/dist-web/assets/{DesignSystemView-BmDDe28A.js → DesignSystemView-BbMOu-XO.js} +1 -1
  16. package/dist-web/assets/{Tooltip-nEEfaYVY.js → Tooltip-CFQEzqC-.js} +1 -1
  17. package/dist-web/assets/abnfDiagram-N423BO3Z-CsByy-GW.js +1 -0
  18. package/dist-web/assets/abnfDiagram-N423BO3Z-Z1APZG5m.js +1 -0
  19. package/dist-web/assets/arc-C-LXCaja.js +1 -0
  20. package/dist-web/assets/arc-C4VyWloT.js +1 -0
  21. package/dist-web/assets/architectureDiagram-T3A2C74G-DZq4L18e.js +36 -0
  22. package/dist-web/assets/architectureDiagram-T3A2C74G-DpddbUcM.js +36 -0
  23. package/dist-web/assets/blockDiagram-VBNYF7ZC-BV4sIf98.js +132 -0
  24. package/dist-web/assets/blockDiagram-VBNYF7ZC-BqccOSMr.js +132 -0
  25. package/dist-web/assets/{c4Diagram-AAUBKEIU-DtzacMnD.js → c4Diagram-5PPSVZJV-0MRkZlgP.js} +1 -1
  26. package/dist-web/assets/{c4Diagram-AAUBKEIU-D1VdMx8d.js → c4Diagram-5PPSVZJV-OHAcJrTy.js} +1 -1
  27. package/dist-web/assets/channel-B2VOQOI-.js +1 -0
  28. package/dist-web/assets/channel-DKjwM05G.js +1 -0
  29. package/dist-web/assets/{chunk-ND2GUHAM-DJoY9wNJ.js → chunk-2GRJ4B5K-DqJHs8Fw.js} +1 -1
  30. package/dist-web/assets/{chunk-ND2GUHAM-C4-rwdcv.js → chunk-2GRJ4B5K-oO6nqeLA.js} +1 -1
  31. package/dist-web/assets/{chunk-QZHKN3VN-C7YGaShq.js → chunk-2Q5K7J3B-B1nCd91o.js} +1 -1
  32. package/dist-web/assets/{chunk-QZHKN3VN-_Rz9_NuS.js → chunk-2Q5K7J3B-BC0Hsfqy.js} +1 -1
  33. package/dist-web/assets/chunk-5RXB4S5H-BfZa4yDH.js +231 -0
  34. package/dist-web/assets/chunk-5RXB4S5H-neG70kZx.js +231 -0
  35. package/dist-web/assets/{chunk-FMBD7UC4-DlLNDUx6.js → chunk-5VM5RSS4-l7biGqeH.js} +1 -1
  36. package/dist-web/assets/{chunk-FMBD7UC4-B2zs_Y-d.js → chunk-5VM5RSS4-u00AcpiJ.js} +1 -1
  37. package/dist-web/assets/chunk-6Q2QTUOP-BO-F11Gs.js +88 -0
  38. package/dist-web/assets/chunk-6Q2QTUOP-RUVRPBzG.js +88 -0
  39. package/dist-web/assets/{chunk-727SXJPM-Dn5wkDO_.js → chunk-GF5L2VYU-Ba-86KTd.js} +5 -5
  40. package/dist-web/assets/{chunk-727SXJPM-Dk2Xa3bA.js → chunk-GF5L2VYU-BtC69fw0.js} +5 -5
  41. package/dist-web/assets/{chunk-4BX2VUAB-DxZViaHS.js → chunk-JWPE2WC7-DIOubEqr.js} +1 -1
  42. package/dist-web/assets/{chunk-4BX2VUAB-WqrE2gaw.js → chunk-JWPE2WC7-u8Pcfhwh.js} +1 -1
  43. package/dist-web/assets/{chunk-2J33WTMH-Dm_s0_4f.js → chunk-KBJHAD2P-DDUeH_Ba.js} +1 -1
  44. package/dist-web/assets/{chunk-2J33WTMH-w4sdiKFO.js → chunk-KBJHAD2P-DS3BL64y.js} +1 -1
  45. package/dist-web/assets/chunk-RYQCIY6F-B9gFMVbS.js +1 -0
  46. package/dist-web/assets/chunk-RYQCIY6F-xg3EO0le.js +1 -0
  47. package/dist-web/assets/{chunk-55IACEB6-B5dE1-Um.js → chunk-XXDRQBXY-B60H0rRC.js} +1 -1
  48. package/dist-web/assets/{chunk-55IACEB6-B12zGIFz.js → chunk-XXDRQBXY-Bn1Xz6TQ.js} +1 -1
  49. package/dist-web/assets/classDiagram-JCYQIIEL-BA1TjAxj.js +1 -0
  50. package/dist-web/assets/classDiagram-JCYQIIEL-BNU7Qn4k.js +1 -0
  51. package/dist-web/assets/classDiagram-v2-OCEON4UE-BA1TjAxj.js +1 -0
  52. package/dist-web/assets/classDiagram-v2-OCEON4UE-BNU7Qn4k.js +1 -0
  53. package/dist-web/assets/{cose-bilkent-S5V4N54A-Bi19n8m-.js → cose-bilkent-JH36ORCC-4Ybddg08.js} +1 -1
  54. package/dist-web/assets/{cose-bilkent-S5V4N54A-c8o8NFp5.js → cose-bilkent-JH36ORCC-DqigO3T4.js} +1 -1
  55. package/dist-web/assets/cynefin-VYW2F7L2-C-EfYT07.js +178 -0
  56. package/dist-web/assets/cynefin-VYW2F7L2-rpD93tQ-.js +178 -0
  57. package/dist-web/assets/cynefinDiagram-MW4NZA55-DWZPLJcD.js +62 -0
  58. package/dist-web/assets/cynefinDiagram-MW4NZA55-DbTqnkVJ.js +62 -0
  59. package/dist-web/assets/dagre-VZM6K2ZE-DcM8aEVY.js +4 -0
  60. package/dist-web/assets/dagre-VZM6K2ZE-M_HVNtqP.js +4 -0
  61. package/dist-web/assets/diagram-7IWD3JNH-DoNximNF.js +30 -0
  62. package/dist-web/assets/diagram-7IWD3JNH-UymgsBNa.js +30 -0
  63. package/dist-web/assets/{diagram-KO2AKTUF-CFQs13i5.js → diagram-B4RE2ZJO-BVA2EhnC.js} +3 -3
  64. package/dist-web/assets/{diagram-KO2AKTUF-agFIuPJW.js → diagram-B4RE2ZJO-BiYu5WPF.js} +3 -3
  65. package/dist-web/assets/{diagram-LMA3HP47-TMIXizxR.js → diagram-LBJQPF4R-BD3kkgOO.js} +2 -2
  66. package/dist-web/assets/{diagram-LMA3HP47-He5zlyMt.js → diagram-LBJQPF4R-m3a1Euj3.js} +2 -2
  67. package/dist-web/assets/diagram-Q27KOJAE-D1mYQ_cI.js +24 -0
  68. package/dist-web/assets/diagram-Q27KOJAE-hy_T73PK.js +24 -0
  69. package/dist-web/assets/diagram-UB23O5K3-BWkoQZ4A.js +41 -0
  70. package/dist-web/assets/diagram-UB23O5K3-BtX8u6HG.js +41 -0
  71. package/dist-web/assets/ebnfDiagram-BXEA7PRR-BKs9JUHW.js +1 -0
  72. package/dist-web/assets/ebnfDiagram-BXEA7PRR-CBAnFkRF.js +1 -0
  73. package/dist-web/assets/erDiagram-JOGREHBK-3vKcWsxm.js +85 -0
  74. package/dist-web/assets/erDiagram-JOGREHBK-BIpd6dTf.js +85 -0
  75. package/dist-web/assets/flowDiagram-UKHOOZJN-D9wBbHm2.js +156 -0
  76. package/dist-web/assets/flowDiagram-UKHOOZJN-Z83i2UWI.js +156 -0
  77. package/dist-web/assets/ganttDiagram-PKOTCBZU-Cd_dViF-.js +292 -0
  78. package/dist-web/assets/ganttDiagram-PKOTCBZU-DFrb_S1d.js +292 -0
  79. package/dist-web/assets/{gitGraphDiagram-PVQCEYII-BSDFfwdY.js → gitGraphDiagram-DS77QQ5N-BiEEtTo7.js} +3 -3
  80. package/dist-web/assets/{gitGraphDiagram-PVQCEYII-DMbTATyw.js → gitGraphDiagram-DS77QQ5N-Dp3Ar-hi.js} +3 -3
  81. package/dist-web/assets/{graph-BwjfAU3j.js → graph-CAUpWmoK.js} +1 -1
  82. package/dist-web/assets/{graph--OzhPTMs.js → graph-DOmOIIwC.js} +1 -1
  83. package/dist-web/assets/{index-W6VnSrkB.js → index-Ba1OvLjf.js} +2 -2
  84. package/dist-web/assets/{index-CkVgGDpx.js → index-CiPA8Kex.js} +4 -4
  85. package/dist-web/assets/{index-BzK4vJBu.js → index-DdEakFJM.js} +1 -1
  86. package/dist-web/assets/{index10-Czg_oF-W.js → index10-CNr4U-Nw.js} +1 -1
  87. package/dist-web/assets/{index11-BjzCZuCr.js → index11-Dto_yZNz.js} +1 -1
  88. package/dist-web/assets/{index5-DlVoNkCD.js → index5-B2PldaO2.js} +1 -1
  89. package/dist-web/assets/{index6-BxiXA2yo.js → index6-CBdZmmyx.js} +1 -1
  90. package/dist-web/assets/{index7-BPdza6d1.js → index7-Dz9oCsUF.js} +1 -1
  91. package/dist-web/assets/{index8-Q_XzGC1Z.js → index8-B6k25jtU.js} +2 -2
  92. package/dist-web/assets/{infoDiagram-5YYISTIA-2JF3XEdD.js → infoDiagram-6WML65LV-BSa2g04G.js} +1 -1
  93. package/dist-web/assets/{infoDiagram-5YYISTIA-UrQusrJq.js → infoDiagram-6WML65LV-D4ph2sIH.js} +1 -1
  94. package/dist-web/assets/{ishikawaDiagram-YF4QCWOH-7RVUL-vB.js → ishikawaDiagram-WSZJBQD7-DjKjbMm9.js} +5 -5
  95. package/dist-web/assets/{ishikawaDiagram-YF4QCWOH-C5OstRVV.js → ishikawaDiagram-WSZJBQD7-Hm36UOQe.js} +5 -5
  96. package/dist-web/assets/{journeyDiagram-JHISSGLW-B34fCMu9.js → journeyDiagram-NVQOT4AX-DttHDfPQ.js} +1 -1
  97. package/dist-web/assets/{journeyDiagram-JHISSGLW-yctdo4bX.js → journeyDiagram-NVQOT4AX-MvWWPNDV.js} +1 -1
  98. package/dist-web/assets/{kanban-definition-UN3LZRKU-BS4FBZsQ.js → kanban-definition-27J2QSJJ-C5gB-W0d.js} +7 -7
  99. package/dist-web/assets/{kanban-definition-UN3LZRKU-CxBCv27E.js → kanban-definition-27J2QSJJ-Cu-E_cXA.js} +5 -5
  100. package/dist-web/assets/layout-CvP6o9AK.js +1 -0
  101. package/dist-web/assets/layout-D-LzfAck.js +1 -0
  102. package/dist-web/assets/{linear-3mB6q2-g.js → linear-B3HWgQI2.js} +1 -1
  103. package/dist-web/assets/{linear-BKCnUo31.js → linear-BRGe4-d6.js} +1 -1
  104. package/dist-web/assets/map-CWKZqZjr.js +1 -0
  105. package/dist-web/assets/map-DxJ2ADlA.js +1 -0
  106. package/dist-web/assets/mermaid.core-D-9Sx1No.js +314 -0
  107. package/dist-web/assets/mermaidParser.worker-PTFfzpoB.js +318 -0
  108. package/dist-web/assets/{mindmap-definition-RKZ34NQL-BmJZpjh6.js → mindmap-definition-FAOFIHXS-C4vnms3i.js} +2 -2
  109. package/dist-web/assets/{mindmap-definition-RKZ34NQL-1mjWUcf6.js → mindmap-definition-FAOFIHXS-Cg_hoVIq.js} +1 -1
  110. package/dist-web/assets/pegDiagram-VL7TDLO6-B2fFEFUH.js +1 -0
  111. package/dist-web/assets/pegDiagram-VL7TDLO6-CSX9hitD.js +1 -0
  112. package/dist-web/assets/pieDiagram-7S7Q4E2Y-0L0mxahZ.js +39 -0
  113. package/dist-web/assets/pieDiagram-7S7Q4E2Y-C7T0Cmw1.js +39 -0
  114. package/dist-web/assets/{quadrantDiagram-W4KKPZXB-BmT_qM09.js → quadrantDiagram-CIZ2JOQS-BBy7w4kD.js} +3 -3
  115. package/dist-web/assets/{quadrantDiagram-W4KKPZXB-C0kPuyNP.js → quadrantDiagram-CIZ2JOQS-U483z0er.js} +3 -3
  116. package/dist-web/assets/railroadDiagram-AXF67PYL-D80a2_DJ.js +1 -0
  117. package/dist-web/assets/railroadDiagram-AXF67PYL-DX8y0MzW.js +1 -0
  118. package/dist-web/assets/{requirementDiagram-4Y6WPE33-C0YP_Amt.js → requirementDiagram-LRYGKXZP-CeyHfq8t.js} +3 -3
  119. package/dist-web/assets/{requirementDiagram-4Y6WPE33-CZrxH1Y2.js → requirementDiagram-LRYGKXZP-DGD5J_4k.js} +3 -3
  120. package/dist-web/assets/sankeyDiagram-W5VNT64P-CCISkkrR.js +40 -0
  121. package/dist-web/assets/sankeyDiagram-W5VNT64P-CT5PdZz2.js +40 -0
  122. package/dist-web/assets/sequenceDiagram-SI44F4Z6-BeMzHWXI.js +162 -0
  123. package/dist-web/assets/sequenceDiagram-SI44F4Z6-jQfm2XS7.js +162 -0
  124. package/dist-web/assets/sizeCapture-X5ZJPWSS-BQsTdtrv.js +1 -0
  125. package/dist-web/assets/sizeCapture-X5ZJPWSS-lRZsmCoS.js +1 -0
  126. package/dist-web/assets/stateDiagram-OKZ733FA-ClCgTdUm.js +1 -0
  127. package/dist-web/assets/stateDiagram-OKZ733FA-Cv59z5YT.js +1 -0
  128. package/dist-web/assets/stateDiagram-v2-UEYNNEHI-R8jTc--F.js +1 -0
  129. package/dist-web/assets/stateDiagram-v2-UEYNNEHI-fi_lrTAx.js +1 -0
  130. package/dist-web/assets/swimlanes-SLNWSIFB-BCdOUN05.js +2 -0
  131. package/dist-web/assets/swimlanes-SLNWSIFB-Cu5l7SuR.js +1 -0
  132. package/dist-web/assets/swimlanesDiagram-ULZ7WXOC-BUd_uYK3.js +8 -0
  133. package/dist-web/assets/swimlanesDiagram-ULZ7WXOC-CalrsgPK.js +8 -0
  134. package/dist-web/assets/{timeline-definition-PNZ67QCA-DsVZdrZa.js → timeline-definition-Z64GVDOM-CMjnh4bu.js} +4 -4
  135. package/dist-web/assets/{timeline-definition-PNZ67QCA-DnB6Usl0.js → timeline-definition-Z64GVDOM-DpWutSKa.js} +4 -4
  136. package/dist-web/assets/vennDiagram-T6HMQDX7-DKJW_8oU.js +34 -0
  137. package/dist-web/assets/vennDiagram-T6HMQDX7-DVC5JVsc.js +34 -0
  138. package/dist-web/assets/{vue.runtime.esm-bundler-pgHGheCW.js → vue.runtime.esm-bundler-BwwRtQwQ.js} +1 -1
  139. package/dist-web/assets/{wardleyDiagram-YWT4CUSO-oBauTCEw.js → wardleyDiagram-T6FBY63Y-BK2mrq7L.js} +3 -3
  140. package/dist-web/assets/{wardleyDiagram-YWT4CUSO-DCiyDQNB.js → wardleyDiagram-T6FBY63Y-oUvgepFn.js} +3 -3
  141. package/dist-web/assets/xychartDiagram-ELKLHX3M-DI6n79q0.js +7 -0
  142. package/dist-web/assets/xychartDiagram-ELKLHX3M-DUJu9F7-.js +7 -0
  143. package/dist-web/index.html +1 -1
  144. package/dist-web/vis/index.html.gz +0 -0
  145. package/native/win32/prebuilds/win32-arm64/win32-console-mode.node +0 -0
  146. package/native/win32/prebuilds/win32-x64/win32-console-mode.node +0 -0
  147. package/package.json +9 -11
  148. package/skills/screenshot-lesen/SKILL.md +0 -1
  149. package/skills/web-lesen/SKILL.md +0 -1
  150. package/telegram-plugin/dist/bridge.mjs +7 -25
  151. package/telegram-plugin/dist/mcp-server.mjs +236 -71
  152. package/dist-web/assets/arc-4xPfymbf.js +0 -1
  153. package/dist-web/assets/arc-Doj0wRZ0.js +0 -1
  154. package/dist-web/assets/architectureDiagram-3BPJPVTR-BGih283a.js +0 -36
  155. package/dist-web/assets/architectureDiagram-3BPJPVTR-CQ09RrbH.js +0 -36
  156. package/dist-web/assets/blockDiagram-GPEHLZMM-3ShMf1gu.js +0 -132
  157. package/dist-web/assets/blockDiagram-GPEHLZMM-CAtDjkJt.js +0 -132
  158. package/dist-web/assets/channel-DNkUo9e6.js +0 -1
  159. package/dist-web/assets/channel-DcnUTIGB.js +0 -1
  160. package/dist-web/assets/chunk-AQP2D5EJ-FS8-f8lF.js +0 -231
  161. package/dist-web/assets/chunk-AQP2D5EJ-UKhb4V4r.js +0 -231
  162. package/dist-web/assets/classDiagram-4FO5ZUOK-B1ZO8EbE.js +0 -1
  163. package/dist-web/assets/classDiagram-4FO5ZUOK-xk6cM9Kq.js +0 -1
  164. package/dist-web/assets/classDiagram-v2-Q7XG4LA2-B1ZO8EbE.js +0 -1
  165. package/dist-web/assets/classDiagram-v2-Q7XG4LA2-xk6cM9Kq.js +0 -1
  166. package/dist-web/assets/dagre-BM42HDAG-CmUO9qKN.js +0 -4
  167. package/dist-web/assets/dagre-BM42HDAG-DLMfLCoV.js +0 -4
  168. package/dist-web/assets/diagram-2AECGRRQ-DQTst0OH.js +0 -43
  169. package/dist-web/assets/diagram-2AECGRRQ-L74iLMqd.js +0 -43
  170. package/dist-web/assets/diagram-5GNKFQAL-BiBm7CJR.js +0 -10
  171. package/dist-web/assets/diagram-5GNKFQAL-DoE6q7H1.js +0 -10
  172. package/dist-web/assets/diagram-OG6HWLK6-BHCt1E0n.js +0 -24
  173. package/dist-web/assets/diagram-OG6HWLK6-DRyxjFMa.js +0 -24
  174. package/dist-web/assets/erDiagram-TEJ5UH35-BoDczjGG.js +0 -85
  175. package/dist-web/assets/erDiagram-TEJ5UH35-yd6SOv_7.js +0 -85
  176. package/dist-web/assets/flowDiagram-I6XJVG4X-DHoceI7r.js +0 -162
  177. package/dist-web/assets/flowDiagram-I6XJVG4X-DkYNQv0R.js +0 -162
  178. package/dist-web/assets/ganttDiagram-6RSMTGT7-Cg1TQBc0.js +0 -292
  179. package/dist-web/assets/ganttDiagram-6RSMTGT7-Z6klo7KK.js +0 -292
  180. package/dist-web/assets/layout-C1ojF0zw.js +0 -1
  181. package/dist-web/assets/layout-SsrduOYp.js +0 -1
  182. package/dist-web/assets/mermaid.core-D_lKT0dR.js +0 -309
  183. package/dist-web/assets/mermaidParser.worker-Dx4jPi9z.js +0 -313
  184. package/dist-web/assets/pieDiagram-4H26LBE5-BU41t2A_.js +0 -30
  185. package/dist-web/assets/pieDiagram-4H26LBE5-BkwDAvbt.js +0 -30
  186. package/dist-web/assets/sankeyDiagram-5OEKKPKP-De_o7hDr.js +0 -40
  187. package/dist-web/assets/sankeyDiagram-5OEKKPKP-Dvuj6bMA.js +0 -40
  188. package/dist-web/assets/sequenceDiagram-3UESZ5HK-DuCrgPyA.js +0 -162
  189. package/dist-web/assets/sequenceDiagram-3UESZ5HK-VAxffBe7.js +0 -162
  190. package/dist-web/assets/stateDiagram-AJRCARHV-CYLupxM7.js +0 -1
  191. package/dist-web/assets/stateDiagram-AJRCARHV-nDExQydZ.js +0 -1
  192. package/dist-web/assets/stateDiagram-v2-BHNVJYJU-BhEc7Thx.js +0 -1
  193. package/dist-web/assets/stateDiagram-v2-BHNVJYJU-BzwD_BIl.js +0 -1
  194. package/dist-web/assets/vennDiagram-CIIHVFJN-BBHQmCFf.js +0 -34
  195. package/dist-web/assets/vennDiagram-CIIHVFJN-Cfj-K9NW.js +0 -34
  196. package/dist-web/assets/wardley-L42UT6IY-BJFn8eDD.js +0 -173
  197. package/dist-web/assets/wardley-L42UT6IY-BSu8-4hg.js +0 -173
  198. package/dist-web/assets/xychartDiagram-2RQKCTM6-C2iZpl9I.js +0 -7
  199. package/dist-web/assets/xychartDiagram-2RQKCTM6-Db_VoDBV.js +0 -7
  200. package/mnemo/access_routes.js +0 -692
  201. package/mnemo/agent_governance.js +0 -4242
  202. package/mnemo/agent_mail.js +0 -901
  203. package/mnemo/bootstrap_auto.js +0 -137
  204. package/mnemo/brief_coordination.js +0 -226
  205. package/mnemo/code_read_tools.js +0 -375
  206. package/mnemo/context_preview_tools.js +0 -603
  207. package/mnemo/embeddings.js +0 -66
  208. package/mnemo/external_repo_ops.js +0 -575
  209. package/mnemo/facts/example-project-rules.json +0 -90
  210. package/mnemo/facts/example.json +0 -34
  211. package/mnemo/identity_schema.sql +0 -139
  212. package/mnemo/journal_schema.js +0 -561
  213. package/mnemo/loop_doctor_tools.js +0 -661
  214. package/mnemo/mail_secret_refs.js +0 -150
  215. package/mnemo/mcp.js +0 -9309
  216. package/mnemo/memory_consolidation.js +0 -1914
  217. package/mnemo/memory_health_tools.js +0 -165
  218. package/mnemo/package.json +0 -79
  219. package/mnemo/protected_scope_gate.js +0 -627
  220. package/mnemo/resource_access_control.js +0 -684
  221. package/mnemo/runtime_governance.js +0 -1256
  222. package/mnemo/runtime_turn_gate.js +0 -862
  223. package/mnemo/sandbox.js +0 -143
  224. package/mnemo/schema.sql +0 -389
  225. package/mnemo/shared_utils.js +0 -763
  226. package/mnemo/skills/agent-auto-resume/SKILL.md +0 -56
  227. package/mnemo/skills/agent_hand/SKILL.md +0 -43
  228. package/mnemo/skills/agent_hand/run.js +0 -63
  229. package/mnemo/skills/book_flight/SKILL.md +0 -34
  230. package/mnemo/skills/external_repo_review/SKILL.md +0 -43
  231. package/mnemo/skills/external_repo_review/run.js +0 -73
  232. package/mnemo/skills/pay_invoice/SKILL.md +0 -34
  233. package/mnemo/team_quality_ops.js +0 -944
  234. package/mnemo/timeline_report_tools.js +0 -810
  235. package/mnemo/write_gate_risk.js +0 -80
  236. package/mnemo/writer_health.js +0 -152
  237. package/skills/doku-ingestion/SKILL.md +0 -48
  238. package/skills/doku-ingestion/ingest_docs.py +0 -133
@@ -50,4 +50,3 @@ betrifft, sonst reicht Weg 1.
50
50
  dazusagen, dass es OCR ist und Unsicherheit moeglich ist.
51
51
  - Niemals Secrets aus Bildern im Klartext wiedergeben — Fundort und Art
52
52
  nennen, Werte maskieren.
53
- - Merke dir neue Erkenntnisse zum Rezept (z.B. bessere Parameter) in Mnemo.
@@ -56,4 +56,3 @@ den, wenn er verfuegbar ist; sonst Crawl4AI auf die offizielle Doku-URL.
56
56
  fremden geschuetzten Bereiche, keine Logins ohne Auftrag.
57
57
  - Immer sagen, DASS und WIE du die Seite geladen hast (per web-lesen/Crawl4AI).
58
58
  - Grosse Seiten: nur die relevanten Abschnitte zitieren, nicht alles dumpen.
59
- - Ergebnisse/Fakten bei Bedarf in Mnemo capturen.
@@ -59216,7 +59216,7 @@ var import_out = (/* @__PURE__ */ __commonJSMin(((exports) => {
59216
59216
  * BLUN_TELEGRAM_STATE_DIR at a temp dir after import.
59217
59217
  */
59218
59218
  function stateDir() {
59219
- return process.env.BLUN_TELEGRAM_STATE_DIR ?? join(homedir(), ".blun", "channels", "telegram");
59219
+ return process.env["BLUN_TELEGRAM_STATE_DIR"] ?? join(homedir(), ".blun", "channels", "telegram");
59220
59220
  }
59221
59221
  function accessFile() {
59222
59222
  return join(stateDir(), "access.json");
@@ -59251,7 +59251,7 @@ function sessionLog() {
59251
59251
  return join(stateDir(), "session.log");
59252
59252
  }
59253
59253
  function workspaceDir() {
59254
- return process.env.BLUN_TELEGRAM_WORKSPACE ?? join(stateDir(), "workspace");
59254
+ return process.env["BLUN_TELEGRAM_WORKSPACE"] ?? join(stateDir(), "workspace");
59255
59255
  }
59256
59256
  function ensureStateDir() {
59257
59257
  mkdirSync(stateDir(), {
@@ -59270,7 +59270,9 @@ function loadEnvFile() {
59270
59270
  try {
59271
59271
  for (const line of readFileSync(envFile(), "utf8").split(/\r?\n/)) {
59272
59272
  const m = line.match(/^(\w+)=(.*)$/);
59273
- if (m !== null && process.env[m[1]] === void 0) process.env[m[1]] = m[2].trim();
59273
+ const key = m?.[1];
59274
+ const value = m?.[2];
59275
+ if (key !== void 0 && value !== void 0 && process.env[key] === void 0) process.env[key] = value.trim();
59274
59276
  }
59275
59277
  } catch {}
59276
59278
  }
@@ -59280,7 +59282,7 @@ const PLACEHOLDER_RE = /replace|paste|your[-_]|xxxx/i;
59280
59282
  * Telegram tokens always contain a colon (`<bot_id>:<secret>`).
59281
59283
  */
59282
59284
  function botToken() {
59283
- const token = process.env.BLUN_TELEGRAM_BOT_TOKEN;
59285
+ const token = process.env["BLUN_TELEGRAM_BOT_TOKEN"];
59284
59286
  if (token === void 0 || token.length === 0) return void 0;
59285
59287
  if (PLACEHOLDER_RE.test(token) || !token.includes(":")) return void 0;
59286
59288
  return token;
@@ -67485,14 +67487,7 @@ function resolvePluginNodeLaunch(entry, pluginRoot, options = {}) {
67485
67487
  env: []
67486
67488
  };
67487
67489
  }
67488
- /**
67489
- * MCP servers explicitly attached by the bridge. A bundled native launch gets
67490
- * Telegram from the enabled plugin; the mnemo hub is added when
67491
- * `BLUN_MNEMO_MCP` points at its mcp.js.
67492
- * (King's own mnemo lane — full mem_* tool access, same durable memory as the
67493
- * rest of the team). Other launches keep the direct Telegram server, and mnemo
67494
- * remains optional.
67495
- */
67490
+ /** MCP servers explicitly attached by the bridge. */
67496
67491
  function buildMcpServers(options = {}) {
67497
67492
  const env = options.env ?? process.env;
67498
67493
  const here = options.moduleDir ?? dirname(fileURLToPath(import.meta.url));
@@ -67516,19 +67511,6 @@ function buildMcpServers(options = {}) {
67516
67511
  }]
67517
67512
  });
67518
67513
  }
67519
- const mnemoEntry = env["BLUN_MNEMO_MCP"]?.trim();
67520
- if (mnemoEntry !== void 0 && mnemoEntry.length > 0) {
67521
- const mnemoNode = env["BLUN_MNEMO_NODE"]?.trim();
67522
- servers.push({
67523
- name: "mnemo",
67524
- command: mnemoNode !== void 0 && mnemoNode.length > 0 ? mnemoNode : options.execPath ?? process.execPath,
67525
- args: [mnemoEntry],
67526
- env: [{
67527
- name: "MNEMO_AGENT",
67528
- value: env["BLUN_MNEMO_AGENT"]?.trim() ?? "king"
67529
- }]
67530
- });
67531
- }
67532
67514
  return servers;
67533
67515
  }
67534
67516
  /** Cheap outbox growth marker: byte size (append-only file). */
@@ -9565,12 +9565,18 @@ var require_data = /* @__PURE__ */ __commonJSMin(((exports, module) => {
9565
9565
  };
9566
9566
  }));
9567
9567
  //#endregion
9568
- //#region ../../node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/utils.js
9568
+ //#region ../../node_modules/.pnpm/fast-uri@3.1.5/node_modules/fast-uri/lib/utils.js
9569
9569
  var require_utils$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
9570
9570
  /** @type {(value: string) => boolean} */
9571
9571
  const isUUID = RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu);
9572
9572
  /** @type {(value: string) => boolean} */
9573
9573
  const isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);
9574
+ /** @type {(value: string) => boolean} */
9575
+ const isHexPair = RegExp.prototype.test.bind(/^[\da-f]{2}$/iu);
9576
+ /** @type {(value: string) => boolean} */
9577
+ const isUnreserved = RegExp.prototype.test.bind(/^[\da-z\-._~]$/iu);
9578
+ /** @type {(value: string) => boolean} */
9579
+ const isPathCharacter = RegExp.prototype.test.bind(/^[\da-z\-._~!$&'()*+,;=:@/]$/iu);
9574
9580
  /**
9575
9581
  * @param {Array<string>} input
9576
9582
  * @returns {string}
@@ -9793,19 +9799,103 @@ var require_utils$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
9793
9799
  return output.join("");
9794
9800
  }
9795
9801
  /**
9796
- * @param {import('../types/index').URIComponent} component
9797
- * @param {boolean} esc
9798
- * @returns {import('../types/index').URIComponent}
9802
+ * Re-escape RFC 3986 gen-delims that must not appear literally in the host.
9803
+ * After the URI regex parses, these characters cannot be literal in the host
9804
+ * field, so any that appear after decoding came from percent-encoding and
9805
+ * must be restored to prevent authority structure changes.
9806
+ *
9807
+ * @param {string} host
9808
+ * @param {boolean} isIP - true for IPv4/IPv6 hosts (skip colon re-escaping)
9809
+ * @returns {string}
9799
9810
  */
9800
- function normalizeComponentEncoding(component, esc) {
9801
- const func = esc !== true ? escape : unescape;
9802
- if (component.scheme !== void 0) component.scheme = func(component.scheme);
9803
- if (component.userinfo !== void 0) component.userinfo = func(component.userinfo);
9804
- if (component.host !== void 0) component.host = func(component.host);
9805
- if (component.path !== void 0) component.path = func(component.path);
9806
- if (component.query !== void 0) component.query = func(component.query);
9807
- if (component.fragment !== void 0) component.fragment = func(component.fragment);
9808
- return component;
9811
+ const HOST_DELIMS = {
9812
+ "@": "%40",
9813
+ "/": "%2F",
9814
+ "?": "%3F",
9815
+ "#": "%23",
9816
+ ":": "%3A"
9817
+ };
9818
+ const HOST_DELIM_RE = /[@/?#:]/g;
9819
+ const HOST_DELIM_NO_COLON_RE = /[@/?#]/g;
9820
+ function reescapeHostDelimiters(host, isIP) {
9821
+ const re = isIP ? HOST_DELIM_NO_COLON_RE : HOST_DELIM_RE;
9822
+ re.lastIndex = 0;
9823
+ return host.replace(re, (ch) => HOST_DELIMS[ch]);
9824
+ }
9825
+ /**
9826
+ * Normalizes percent escapes and optionally decodes only unreserved ASCII bytes.
9827
+ * Reserved delimiters such as `%2F` and `%2E` stay escaped.
9828
+ *
9829
+ * @param {string} input
9830
+ * @param {boolean} [decodeUnreserved=false]
9831
+ * @returns {string}
9832
+ */
9833
+ function normalizePercentEncoding(input, decodeUnreserved = false) {
9834
+ if (input.indexOf("%") === -1) return input;
9835
+ let output = "";
9836
+ for (let i = 0; i < input.length; i++) {
9837
+ if (input[i] === "%" && i + 2 < input.length) {
9838
+ const hex = input.slice(i + 1, i + 3);
9839
+ if (isHexPair(hex)) {
9840
+ const normalizedHex = hex.toUpperCase();
9841
+ const decoded = String.fromCharCode(parseInt(normalizedHex, 16));
9842
+ if (decodeUnreserved && isUnreserved(decoded)) output += decoded;
9843
+ else output += "%" + normalizedHex;
9844
+ i += 2;
9845
+ continue;
9846
+ }
9847
+ }
9848
+ output += input[i];
9849
+ }
9850
+ return output;
9851
+ }
9852
+ /**
9853
+ * Normalizes path data without turning reserved escapes into live path syntax.
9854
+ * Valid escapes are uppercased, raw unsafe characters are escaped, and only
9855
+ * unreserved bytes that are not `.` are decoded.
9856
+ *
9857
+ * @param {string} input
9858
+ * @returns {string}
9859
+ */
9860
+ function normalizePathEncoding(input) {
9861
+ let output = "";
9862
+ for (let i = 0; i < input.length; i++) {
9863
+ if (input[i] === "%" && i + 2 < input.length) {
9864
+ const hex = input.slice(i + 1, i + 3);
9865
+ if (isHexPair(hex)) {
9866
+ const normalizedHex = hex.toUpperCase();
9867
+ const decoded = String.fromCharCode(parseInt(normalizedHex, 16));
9868
+ if (decoded !== "." && isUnreserved(decoded)) output += decoded;
9869
+ else output += "%" + normalizedHex;
9870
+ i += 2;
9871
+ continue;
9872
+ }
9873
+ }
9874
+ if (isPathCharacter(input[i])) output += input[i];
9875
+ else output += escape(input[i]);
9876
+ }
9877
+ return output;
9878
+ }
9879
+ /**
9880
+ * Escapes a component while preserving existing valid percent escapes.
9881
+ *
9882
+ * @param {string} input
9883
+ * @returns {string}
9884
+ */
9885
+ function escapePreservingEscapes(input) {
9886
+ let output = "";
9887
+ for (let i = 0; i < input.length; i++) {
9888
+ if (input[i] === "%" && i + 2 < input.length) {
9889
+ const hex = input.slice(i + 1, i + 3);
9890
+ if (isHexPair(hex)) {
9891
+ output += "%" + hex.toUpperCase();
9892
+ i += 2;
9893
+ continue;
9894
+ }
9895
+ }
9896
+ output += escape(input[i]);
9897
+ }
9898
+ return output;
9809
9899
  }
9810
9900
  /**
9811
9901
  * @param {import('../types/index').URIComponent} component
@@ -9822,7 +9912,7 @@ var require_utils$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
9822
9912
  if (!isIPv4(host)) {
9823
9913
  const ipV6res = normalizeIPv6(host);
9824
9914
  if (ipV6res.isIPV6 === true) host = `[${ipV6res.escapedHost}]`;
9825
- else host = component.host;
9915
+ else host = reescapeHostDelimiters(host, false);
9826
9916
  }
9827
9917
  uriTokens.push(host);
9828
9918
  }
@@ -9835,7 +9925,10 @@ var require_utils$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
9835
9925
  module.exports = {
9836
9926
  nonSimpleDomain,
9837
9927
  recomposeAuthority,
9838
- normalizeComponentEncoding,
9928
+ reescapeHostDelimiters,
9929
+ normalizePercentEncoding,
9930
+ normalizePathEncoding,
9931
+ escapePreservingEscapes,
9839
9932
  removeDotSegments,
9840
9933
  isIPv4,
9841
9934
  isUUID,
@@ -9844,7 +9937,7 @@ var require_utils$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
9844
9937
  };
9845
9938
  }));
9846
9939
  //#endregion
9847
- //#region ../../node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/lib/schemes.js
9940
+ //#region ../../node_modules/.pnpm/fast-uri@3.1.5/node_modules/fast-uri/lib/schemes.js
9848
9941
  var require_schemes = /* @__PURE__ */ __commonJSMin(((exports, module) => {
9849
9942
  const { isUUID } = require_utils$1();
9850
9943
  const URN_REG = /([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu;
@@ -10027,9 +10120,9 @@ var require_schemes = /* @__PURE__ */ __commonJSMin(((exports, module) => {
10027
10120
  };
10028
10121
  }));
10029
10122
  //#endregion
10030
- //#region ../../node_modules/.pnpm/fast-uri@3.1.0/node_modules/fast-uri/index.js
10123
+ //#region ../../node_modules/.pnpm/fast-uri@3.1.5/node_modules/fast-uri/index.js
10031
10124
  var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
10032
- const { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizeComponentEncoding, isIPv4, nonSimpleDomain } = require_utils$1();
10125
+ const { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizePercentEncoding, normalizePathEncoding, escapePreservingEscapes, reescapeHostDelimiters, isIPv4, nonSimpleDomain } = require_utils$1();
10033
10126
  const { SCHEMES, getSchemeHandler } = require_schemes();
10034
10127
  /**
10035
10128
  * @template {import('./types/index').URIComponent|string} T
@@ -10038,7 +10131,7 @@ var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
10038
10131
  * @returns {T}
10039
10132
  */
10040
10133
  function normalize(uri, options) {
10041
- if (typeof uri === "string") uri = serialize(parse(uri, options), options);
10134
+ if (typeof uri === "string") uri = normalizeString(uri, options);
10042
10135
  else if (typeof uri === "object") uri = parse(serialize(uri, options), options);
10043
10136
  return uri;
10044
10137
  }
@@ -10050,7 +10143,10 @@ var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
10050
10143
  */
10051
10144
  function resolve(baseURI, relativeURI, options) {
10052
10145
  const schemelessOptions = options ? Object.assign({ scheme: "null" }, options) : { scheme: "null" };
10053
- const resolved = resolveComponent(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true);
10146
+ const { parsed: baseParsed, malformedAuthorityOrPort: baseMalformed } = parseWithStatus(baseURI, schemelessOptions);
10147
+ const { parsed: relativeParsed, malformedAuthorityOrPort: relativeMalformed } = parseWithStatus(relativeURI, schemelessOptions);
10148
+ if (baseMalformed || relativeMalformed) throw new Error(baseParsed.error || relativeParsed.error || "URI is malformed.");
10149
+ const resolved = resolveComponent(baseParsed, relativeParsed, schemelessOptions, true);
10054
10150
  schemelessOptions.skipEscape = true;
10055
10151
  return serialize(resolved, schemelessOptions);
10056
10152
  }
@@ -10114,27 +10210,9 @@ var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
10114
10210
  * @returns {boolean}
10115
10211
  */
10116
10212
  function equal(uriA, uriB, options) {
10117
- if (typeof uriA === "string") {
10118
- uriA = unescape(uriA);
10119
- uriA = serialize(normalizeComponentEncoding(parse(uriA, options), true), {
10120
- ...options,
10121
- skipEscape: true
10122
- });
10123
- } else if (typeof uriA === "object") uriA = serialize(normalizeComponentEncoding(uriA, true), {
10124
- ...options,
10125
- skipEscape: true
10126
- });
10127
- if (typeof uriB === "string") {
10128
- uriB = unescape(uriB);
10129
- uriB = serialize(normalizeComponentEncoding(parse(uriB, options), true), {
10130
- ...options,
10131
- skipEscape: true
10132
- });
10133
- } else if (typeof uriB === "object") uriB = serialize(normalizeComponentEncoding(uriB, true), {
10134
- ...options,
10135
- skipEscape: true
10136
- });
10137
- return uriA.toLowerCase() === uriB.toLowerCase();
10213
+ const normalizedA = normalizeComparableURI(uriA, options);
10214
+ const normalizedB = normalizeComparableURI(uriB, options);
10215
+ return normalizedA !== void 0 && normalizedB !== void 0 && normalizedA.toLowerCase() === normalizedB.toLowerCase();
10138
10216
  }
10139
10217
  /**
10140
10218
  * @param {Readonly<import('./types/index').URIComponent>} cmpts
@@ -10163,9 +10241,9 @@ var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
10163
10241
  const schemeHandler = getSchemeHandler(options.scheme || component.scheme);
10164
10242
  if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(component, options);
10165
10243
  if (component.path !== void 0) if (!options.skipEscape) {
10166
- component.path = escape(component.path);
10244
+ component.path = escapePreservingEscapes(component.path);
10167
10245
  if (component.scheme !== void 0) component.path = component.path.split("%3A").join(":");
10168
- } else component.path = unescape(component.path);
10246
+ } else component.path = normalizePercentEncoding(component.path);
10169
10247
  if (options.reference !== "suffix" && component.scheme) uriTokens.push(component.scheme, ":");
10170
10248
  const authority = recomposeAuthority(component);
10171
10249
  if (authority !== void 0) {
@@ -10184,12 +10262,23 @@ var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
10184
10262
  return uriTokens.join("");
10185
10263
  }
10186
10264
  const URI_PARSE = /^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;
10265
+ const AUTHORITY_PREFIX = /^(?:[^#/:?]+:)?\/\/([^/?#]*)/;
10266
+ const AUTHORITY_INTRODUCER_REGION = /^(?:[^#/:?]+:)?([/\\\t\n\r]*)/;
10267
+ /**
10268
+ * @param {import('./types/index').URIComponent} parsed
10269
+ * @param {RegExpMatchArray} matches
10270
+ * @returns {string|undefined}
10271
+ */
10272
+ function getParseError(parsed, matches) {
10273
+ if (matches[2] !== void 0 && parsed.path && parsed.path[0] !== "/") return "URI path must start with \"/\" when authority is present.";
10274
+ if (typeof parsed.port === "number" && (parsed.port < 0 || parsed.port > 65535)) return "URI port is malformed.";
10275
+ }
10187
10276
  /**
10188
10277
  * @param {string} uri
10189
10278
  * @param {import('./types/index').Options} [opts]
10190
- * @returns
10279
+ * @returns {{ parsed: import('./types/index').URIComponent, malformedAuthorityOrPort: boolean }}
10191
10280
  */
10192
- function parse(uri, opts) {
10281
+ function parseWithStatus(uri, opts) {
10193
10282
  const options = Object.assign({}, opts);
10194
10283
  /** @type {import('./types/index').URIComponent} */
10195
10284
  const parsed = {
@@ -10201,9 +10290,29 @@ var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
10201
10290
  query: void 0,
10202
10291
  fragment: void 0
10203
10292
  };
10293
+ let malformedAuthorityOrPort = false;
10204
10294
  let isIP = false;
10205
10295
  if (options.reference === "suffix") if (options.scheme) uri = options.scheme + ":" + uri;
10206
10296
  else uri = "//" + uri;
10297
+ const authorityMatch = uri.match(AUTHORITY_PREFIX);
10298
+ if (authorityMatch !== null && authorityMatch[1].indexOf("\\") !== -1) {
10299
+ parsed.error = "URI authority must not contain a literal backslash.";
10300
+ malformedAuthorityOrPort = true;
10301
+ }
10302
+ const introducerMatch = uri.match(AUTHORITY_INTRODUCER_REGION);
10303
+ if (introducerMatch !== null) {
10304
+ const region = introducerMatch[1];
10305
+ const normalizedRegion = region.replace(/[\t\n\r]/g, "");
10306
+ if (normalizedRegion.length >= 2) {
10307
+ if (normalizedRegion.slice(0, 2) !== "//") {
10308
+ parsed.error = parsed.error || "URI authority must not contain a literal backslash.";
10309
+ malformedAuthorityOrPort = true;
10310
+ } else if (region.length !== normalizedRegion.length) {
10311
+ parsed.error = parsed.error || "URI authority introducer must not contain whitespace.";
10312
+ malformedAuthorityOrPort = true;
10313
+ }
10314
+ }
10315
+ }
10207
10316
  const matches = uri.match(URI_PARSE);
10208
10317
  if (matches) {
10209
10318
  parsed.scheme = matches[1];
@@ -10214,6 +10323,11 @@ var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
10214
10323
  parsed.query = matches[7];
10215
10324
  parsed.fragment = matches[8];
10216
10325
  if (isNaN(parsed.port)) parsed.port = matches[5];
10326
+ const parseError = getParseError(parsed, matches);
10327
+ if (parseError !== void 0) {
10328
+ parsed.error = parsed.error || parseError;
10329
+ malformedAuthorityOrPort = true;
10330
+ }
10217
10331
  if (parsed.host) if (isIPv4(parsed.host) === false) {
10218
10332
  const ipv6result = normalizeIPv6(parsed.host);
10219
10333
  parsed.host = ipv6result.host.toLowerCase();
@@ -10227,7 +10341,7 @@ var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
10227
10341
  const schemeHandler = getSchemeHandler(options.scheme || parsed.scheme);
10228
10342
  if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {
10229
10343
  if (parsed.host && (options.domainHost || schemeHandler && schemeHandler.domainHost) && isIP === false && nonSimpleDomain(parsed.host)) try {
10230
- parsed.host = URL.domainToASCII(parsed.host.toLowerCase());
10344
+ parsed.host = new URL("http://" + parsed.host).hostname;
10231
10345
  } catch (e) {
10232
10346
  parsed.error = parsed.error || "Host's domain name can not be converted to ASCII: " + e;
10233
10347
  }
@@ -10235,14 +10349,61 @@ var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
10235
10349
  if (!schemeHandler || schemeHandler && !schemeHandler.skipNormalize) {
10236
10350
  if (uri.indexOf("%") !== -1) {
10237
10351
  if (parsed.scheme !== void 0) parsed.scheme = unescape(parsed.scheme);
10238
- if (parsed.host !== void 0) parsed.host = unescape(parsed.host);
10352
+ if (parsed.host !== void 0) parsed.host = reescapeHostDelimiters(unescape(parsed.host), isIP);
10353
+ }
10354
+ if (parsed.path) parsed.path = normalizePathEncoding(parsed.path);
10355
+ if (parsed.fragment) try {
10356
+ parsed.fragment = encodeURI(decodeURIComponent(parsed.fragment));
10357
+ } catch {
10358
+ parsed.error = parsed.error || "URI malformed";
10239
10359
  }
10240
- if (parsed.path) parsed.path = escape(unescape(parsed.path));
10241
- if (parsed.fragment) parsed.fragment = encodeURI(decodeURIComponent(parsed.fragment));
10242
10360
  }
10243
10361
  if (schemeHandler && schemeHandler.parse) schemeHandler.parse(parsed, options);
10244
10362
  } else parsed.error = parsed.error || "URI can not be parsed.";
10245
- return parsed;
10363
+ return {
10364
+ parsed,
10365
+ malformedAuthorityOrPort
10366
+ };
10367
+ }
10368
+ /**
10369
+ * @param {string} uri
10370
+ * @param {import('./types/index').Options} [opts]
10371
+ * @returns
10372
+ */
10373
+ function parse(uri, opts) {
10374
+ return parseWithStatus(uri, opts).parsed;
10375
+ }
10376
+ /**
10377
+ * @param {string} uri
10378
+ * @param {import('./types/index').Options} [opts]
10379
+ * @returns {string}
10380
+ */
10381
+ function normalizeString(uri, opts) {
10382
+ return normalizeStringWithStatus(uri, opts).normalized;
10383
+ }
10384
+ /**
10385
+ * @param {string} uri
10386
+ * @param {import('./types/index').Options} [opts]
10387
+ * @returns {{ normalized: string, malformedAuthorityOrPort: boolean }}
10388
+ */
10389
+ function normalizeStringWithStatus(uri, opts) {
10390
+ const { parsed, malformedAuthorityOrPort } = parseWithStatus(uri, opts);
10391
+ return {
10392
+ normalized: malformedAuthorityOrPort ? uri : serialize(parsed, opts),
10393
+ malformedAuthorityOrPort
10394
+ };
10395
+ }
10396
+ /**
10397
+ * @param {import ('./types/index').URIComponent|string} uri
10398
+ * @param {import('./types/index').Options} [opts]
10399
+ * @returns {string|undefined}
10400
+ */
10401
+ function normalizeComparableURI(uri, opts) {
10402
+ if (typeof uri === "string") {
10403
+ const { normalized, malformedAuthorityOrPort } = normalizeStringWithStatus(uri, opts);
10404
+ return malformedAuthorityOrPort ? void 0 : normalized;
10405
+ }
10406
+ if (typeof uri === "object") return serialize(uri, opts);
10246
10407
  }
10247
10408
  const fastUri = {
10248
10409
  SCHEMES,
@@ -72894,7 +73055,7 @@ var import_out = (/* @__PURE__ */ __commonJSMin(((exports) => {
72894
73055
  * BLUN_TELEGRAM_STATE_DIR at a temp dir after import.
72895
73056
  */
72896
73057
  function stateDir() {
72897
- return process.env.BLUN_TELEGRAM_STATE_DIR ?? join(homedir(), ".blun", "channels", "telegram");
73058
+ return process.env["BLUN_TELEGRAM_STATE_DIR"] ?? join(homedir(), ".blun", "channels", "telegram");
72898
73059
  }
72899
73060
  function accessFile() {
72900
73061
  return join(stateDir(), "access.json");
@@ -72925,7 +73086,9 @@ function loadEnvFile() {
72925
73086
  try {
72926
73087
  for (const line of readFileSync(envFile(), "utf8").split(/\r?\n/)) {
72927
73088
  const m = line.match(/^(\w+)=(.*)$/);
72928
- if (m !== null && process.env[m[1]] === void 0) process.env[m[1]] = m[2].trim();
73089
+ const key = m?.[1];
73090
+ const value = m?.[2];
73091
+ if (key !== void 0 && value !== void 0 && process.env[key] === void 0) process.env[key] = value.trim();
72929
73092
  }
72930
73093
  } catch {}
72931
73094
  }
@@ -72935,7 +73098,7 @@ const PLACEHOLDER_RE = /replace|paste|your[-_]|xxxx/i;
72935
73098
  * Telegram tokens always contain a colon (`<bot_id>:<secret>`).
72936
73099
  */
72937
73100
  function botToken() {
72938
- const token = process.env.BLUN_TELEGRAM_BOT_TOKEN;
73101
+ const token = process.env["BLUN_TELEGRAM_BOT_TOKEN"];
72939
73102
  if (token === void 0 || token.length === 0) return void 0;
72940
73103
  if (PLACEHOLDER_RE.test(token) || !token.includes(":")) return void 0;
72941
73104
  return token;
@@ -73398,25 +73561,25 @@ async function runTool(api, token, name, args) {
73398
73561
  switch (name) {
73399
73562
  case "reply": return runReply(api, args);
73400
73563
  case "react":
73401
- assertAllowedChat(args.chat_id);
73402
- await api.setMessageReaction(args.chat_id, Number(args.message_id), [{
73564
+ assertAllowedChat(args["chat_id"]);
73565
+ await api.setMessageReaction(args["chat_id"], Number(args["message_id"]), [{
73403
73566
  type: "emoji",
73404
- emoji: args.emoji
73567
+ emoji: args["emoji"]
73405
73568
  }]);
73406
73569
  return "reacted";
73407
- case "download_attachment": return runDownload(api, token, args.file_id);
73570
+ case "download_attachment": return runDownload(api, token, args["file_id"]);
73408
73571
  case "edit_message": {
73409
- assertAllowedChat(args.chat_id);
73410
- assertTelegramLanguageReleased(args.text, args.release_token);
73411
- const parseMode = args.format === "markdownv2" ? "MarkdownV2" : void 0;
73412
- const edited = await api.editMessageText(args.chat_id, Number(args.message_id), args.text, parseMode !== void 0 ? { parse_mode: parseMode } : void 0);
73413
- const id = typeof edited === "object" ? edited.message_id : args.message_id;
73572
+ assertAllowedChat(args["chat_id"]);
73573
+ assertTelegramLanguageReleased(args["text"], args["release_token"]);
73574
+ const parseMode = args["format"] === "markdownv2" ? "MarkdownV2" : void 0;
73575
+ const edited = await api.editMessageText(args["chat_id"], Number(args["message_id"]), args["text"], parseMode !== void 0 ? { parse_mode: parseMode } : void 0);
73576
+ const id = typeof edited === "object" ? edited.message_id : args["message_id"];
73414
73577
  appendJsonl(outboxLog(), {
73415
73578
  direction: "out",
73416
73579
  kind: "edit",
73417
- chat_id: args.chat_id,
73580
+ chat_id: args["chat_id"],
73418
73581
  message_id: id,
73419
- text: args.text
73582
+ text: args["text"]
73420
73583
  });
73421
73584
  return `edited (id: ${String(id)})`;
73422
73585
  }
@@ -73454,11 +73617,11 @@ function isRecentDuplicate(chatId, text) {
73454
73617
  return false;
73455
73618
  }
73456
73619
  async function runReply(api, args) {
73457
- const chatId = args.chat_id;
73458
- const text = args.text;
73459
- const replyTo = args.reply_to != null ? Number(args.reply_to) : void 0;
73460
- const files = args.files ?? [];
73461
- const parseMode = args.format === "markdownv2" ? "MarkdownV2" : void 0;
73620
+ const chatId = args["chat_id"];
73621
+ const text = args["text"];
73622
+ const replyTo = args["reply_to"] !== null && args["reply_to"] !== void 0 ? Number(args["reply_to"]) : void 0;
73623
+ const files = args["files"] ?? [];
73624
+ const parseMode = args["format"] === "markdownv2" ? "MarkdownV2" : void 0;
73462
73625
  assertAllowedChat(chatId);
73463
73626
  if (files.length === 0 && isGroupChat(chatId) && isGroupNoiseReply(text)) {
73464
73627
  appendJsonl(outboxLog(), {
@@ -73478,7 +73641,7 @@ async function runReply(api, args) {
73478
73641
  });
73479
73642
  return "already delivered: an identical message was sent to this chat moments ago — do NOT send it again";
73480
73643
  }
73481
- assertTelegramLanguageReleased(text, args.release_token);
73644
+ assertTelegramLanguageReleased(text, args["release_token"]);
73482
73645
  for (const file of files) {
73483
73646
  assertSendable(file);
73484
73647
  const info = statSync(file);
@@ -73493,7 +73656,9 @@ async function runReply(api, args) {
73493
73656
  try {
73494
73657
  for (let i = 0; i < chunks.length; i++) {
73495
73658
  const shouldReplyTo = replyTo !== void 0 && replyMode !== "off" && (replyMode === "all" || i === 0);
73496
- const sent = await api.sendMessage(chatId, chunks[i], {
73659
+ const chunkText = chunks[i];
73660
+ if (chunkText === void 0) continue;
73661
+ const sent = await api.sendMessage(chatId, chunkText, {
73497
73662
  ...shouldReplyTo ? { reply_parameters: { message_id: replyTo } } : {},
73498
73663
  ...parseMode !== void 0 ? { parse_mode: parseMode } : {}
73499
73664
  });
@@ -1 +0,0 @@
1
- import{T as ln,V as an,W as z,X as q,Y as X,$ as un,a0 as y,a1 as tn,a2 as F,a3 as _,a4 as rn,a5 as o,a6 as on,a7 as sn,a8 as fn}from"./mermaid.core-D_lKT0dR.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,Y,a){var O=I-l,i=D-h,n=Y-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function M(l,h,I,D,v,A,Y){var a=l-I,O=h-D,i=(Y?A:-A)/F(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,$=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*F(on(0,T*T*R-P*P)),V=(P*g-m*S)/R,W=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=V-$,e=W-t,r=w-$,j=p-t;return x*x+e*e>r*r+j*j&&(V=w,W=p),{cx:V,cy:W,x01:-n,y01:-d,x11:V*(v/T-1),y11:W*(v/T-1)}}function hn(){var l=cn,h=yn,I=X(0),D=null,v=gn,A=dn,Y=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,$=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if($>tn-y)a.moveTo(s*z(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*z(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=$,S=$,V=Y.apply(this,arguments)/2,W=V>y&&(D?+D.apply(this,arguments):F(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if(W>y){var j=sn(W/u*q(V)),G=sn(W/s*q(V));(P-=j*2)>y?(j*=t?1:-1,R+=j,T-=j):(P=0,R=T=(f+c)/2),(S-=G*2)>y?(G*=t?1:-1,m+=G,g-=G):(S=0,m=g=(f+c)/2)}var B=s*z(m),C=s*q(m),H=u*z(T),J=u*q(T);if(w>y){var K=s*z(g),L=s*q(g),N=u*z(R),Q=u*q(R),E;if($<an)if(E=pn(B,C,N,Q,K,L,H,J)){var U=B-E[0],Z=C-E[1],k=K-E[0],b=L-E[1],nn=1/q(fn((U*k+Z*b)/(F(U*U+Z*Z)*F(k*k+b*b)))/2),en=F(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=M(N,Q,B,C,s,x,t),r=M(K,L,H,J,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(B,C),a.arc(0,0,s,m,g,!t)):a.moveTo(B,C),!(u>y)||!(P>y)?a.lineTo(H,J):p>y?(e=M(H,J,K,L,u,-p,t),r=M(B,C,N,Q,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[z(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:X(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:X(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:X(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:X(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:X(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:X(+n),i):A},i.padAngle=function(n){return arguments.length?(Y=typeof n=="function"?n:X(+n),i):Y},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
@@ -1 +0,0 @@
1
- import{a0 as ln,a1 as an,a2 as y,a3 as tn,a4 as H,a5 as q,a6 as _,a7 as un,a8 as rn,a9 as L,aa as o,ab as B,ac as sn,ad as on,ae as fn}from"./mermaidParser.worker-Dx4jPi9z.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,C,a){var O=I-l,i=D-h,n=C-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function W(l,h,I,D,v,A,C){var a=l-I,O=h-D,i=(C?A:-A)/L(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,F=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*L(fn(0,T*T*R-P*P)),j=(P*g-m*S)/R,z=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=j-F,e=z-t,r=w-F,G=p-t;return x*x+e*e>r*r+G*G&&(j=w,z=p),{cx:j,cy:z,x01:-n,y01:-d,x11:j*(v/T-1),y11:z*(v/T-1)}}function hn(){var l=cn,h=yn,I=B(0),D=null,v=gn,A=dn,C=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-an,c=A.apply(this,arguments)-an,F=un(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(F>tn-y)a.moveTo(s*H(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*H(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=F,S=F,j=C.apply(this,arguments)/2,z=j>y&&(D?+D.apply(this,arguments):L(u*u+s*s)),w=_(un(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if(z>y){var G=sn(z/u*q(j)),M=sn(z/s*q(j));(P-=G*2)>y?(G*=t?1:-1,R+=G,T-=G):(P=0,R=T=(f+c)/2),(S-=M*2)>y?(M*=t?1:-1,m+=M,g-=M):(S=0,m=g=(f+c)/2)}var J=s*H(m),K=s*q(m),N=u*H(T),Q=u*q(T);if(w>y){var U=s*H(g),V=s*q(g),X=u*H(R),Y=u*q(R),E;if(F<rn)if(E=pn(J,K,X,Y,U,V,N,Q)){var Z=J-E[0],$=K-E[1],b=U-E[0],k=V-E[1],nn=1/q(on((Z*b+$*k)/(L(Z*Z+$*$)*L(b*b+k*k)))/2),en=L(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=W(X,Y,J,K,s,x,t),r=W(U,V,N,Q,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(J,K),a.arc(0,0,s,m,g,!t)):a.moveTo(J,K),!(u>y)||!(P>y)?a.lineTo(N,Q):p>y?(e=W(N,Q,U,V,u,-p,t),r=W(J,K,X,Y,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-rn/2;return[H(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:B(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:B(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:B(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:B(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:B(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:B(+n),i):A},i.padAngle=function(n){return arguments.length?(C=typeof n=="function"?n:B(+n),i):C},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};