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
@@ -1,137 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- /**
4
- * Non-interactive bootstrap for CI, containers, and scripted installs.
5
- */
6
- const fs = require("fs");
7
- const path = require("path");
8
- const Database = require("better-sqlite3");
9
-
10
- const ROOT = __dirname;
11
- const REPO_ROOT = path.resolve(ROOT, "..", "..");
12
- const dbPath = process.env.MNEMO_DB || path.join(ROOT, "mnemo.db");
13
- const ENV_FILE = process.env.MNEMO_ENV_FILE || path.join(ROOT, ".env.local");
14
- const HOOK_ENV_FILE = process.env.MNEMO_HOOK_ENV_FILE || path.join(REPO_ROOT, ".mnemo-hook.env");
15
-
16
- function cleanScope(value) {
17
- return String(value || "personal").trim().toLowerCase().replace(/[^a-z0-9_-]/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "") || "personal";
18
- }
19
-
20
- function writeEnv(file, entries) {
21
- const lines = [`# Generated by mnemo bootstrap_auto on ${new Date().toISOString()}`];
22
- for (const [key, value] of entries) {
23
- if (value === undefined || value === null || value === "") continue;
24
- lines.push(`${key}=${String(value)}`);
25
- }
26
- fs.mkdirSync(path.dirname(file), { recursive: true });
27
- fs.writeFileSync(file, lines.join("\n") + "\n");
28
- }
29
-
30
- function readJson(file) {
31
- return JSON.parse(fs.readFileSync(file, "utf8"));
32
- }
33
-
34
- function writeJson(file, data) {
35
- fs.writeFileSync(file, JSON.stringify(data, null, 2) + "\n");
36
- }
37
-
38
- const ownerName = process.env.MNEMO_OWNER_NAME || "owner";
39
- const scopeName = cleanScope(process.env.MNEMO_DEFAULT_SCOPE || process.env.MNEMO_SCOPE || "personal");
40
- const primaryAgent = cleanScope(process.env.MNEMO_AGENT || process.env.MNEMO_DEFAULT_AGENT || "agent");
41
- const agents = String(process.env.MNEMO_LOCAL_AGENTS || primaryAgent).split(",").map(s => cleanScope(s)).filter(Boolean);
42
- const tz = process.env.MNEMO_TZ_OFFSET_HOURS || "0";
43
- const mission = process.env.MNEMO_MISSION || "remember context, coordinate work, and avoid forgotten tasks";
44
- const firstProject = process.env.MNEMO_PROJECT || "";
45
-
46
- console.log("\nMnemo auto-bootstrap starting...\n");
47
-
48
- const db = new Database(dbPath);
49
- db.pragma("journal_mode = WAL");
50
-
51
- for (const f of ["schema.sql", "identity_schema.sql"]) {
52
- const p = path.join(ROOT, f);
53
- if (fs.existsSync(p)) {
54
- db.exec(fs.readFileSync(p, "utf8"));
55
- console.log(` OK Applied ${f}`);
56
- }
57
- }
58
-
59
- const coreValue = db.prepare("INSERT OR IGNORE INTO core_value (name, statement, scope, rationale) VALUES (?,?,?,?)");
60
- coreValue.run("owner_identity", `Owner of this Mnemo instance is "${ownerName}".`, "all", "Set during bootstrap.");
61
- coreValue.run("operating_scope", `Default Mnemo scope is "${scopeName}".`, "all", "Set during bootstrap.");
62
- coreValue.run("agent_roster", `Active agents: ${agents.join(", ") || primaryAgent}.`, "all", "Set during bootstrap.");
63
- coreValue.run("mission", mission, "all", "Set during bootstrap.");
64
- coreValue.run("identity_must_persist", "Agents must reload owner identity, their own role, core values, preferences, open promises, and project rules at the start of every meaningful session.", "all", "Prevents identity drift across sessions.");
65
- coreValue.run("token_efficiency", "Agents must search small, inspect compact IDs/timelines first, and fetch full memories only for selected records.", "all", "Prevents wasting context window and tokens.");
66
-
67
- db.exec(`
68
- CREATE TABLE IF NOT EXISTS correction_pattern (
69
- id INTEGER PRIMARY KEY AUTOINCREMENT,
70
- pattern TEXT NOT NULL UNIQUE,
71
- classifier TEXT NOT NULL,
72
- actor_scope TEXT,
73
- trait_to_adjust TEXT,
74
- delta REAL,
75
- hit_count INTEGER NOT NULL DEFAULT 0,
76
- last_hit_at TEXT
77
- )
78
- `);
79
- const ins = db.prepare("INSERT OR IGNORE INTO correction_pattern (pattern, classifier, actor_scope, trait_to_adjust, delta) VALUES (?,?,?,?,?)");
80
- ins.run("\\b(stop|halt|not like that|don't|no)\\b", "correction", ownerName, null, null);
81
- ins.run("\\b(perfect|nice|exactly|love it|good)\\b", "praise", ownerName, null, null);
82
- ins.run("\\b(I'll|i will|going to|will do)\\b", "promise", null, null, null);
83
-
84
- const factsDir = process.env.MNEMO_FACTS_DIR || path.join(ROOT, "facts");
85
- fs.mkdirSync(factsDir, { recursive: true });
86
- const factsPath = path.join(factsDir, `${scopeName}.json`);
87
- const rulesPath = path.join(factsDir, `${scopeName}-project-rules.json`);
88
-
89
- if (!fs.existsSync(factsPath)) {
90
- const facts = readJson(path.join(ROOT, "facts", "example.json"));
91
- facts._comment = "PRIVATE LOCAL FILE - edit for your own team/company. Do not commit real facts.";
92
- facts._meta.scope = scopeName;
93
- facts._meta.updated = new Date().toISOString().slice(0, 10);
94
- facts.owner = { name: ownerName };
95
- facts.agents = agents.map(name => ({ name, role: "agent", status: "active" }));
96
- facts.mission = { summary: mission };
97
- writeJson(factsPath, facts);
98
- }
99
-
100
- if (!fs.existsSync(rulesPath)) {
101
- const rules = readJson(path.join(ROOT, "facts", "example-project-rules.json"));
102
- rules._comment = "PRIVATE LOCAL FILE - edit project rules before enabling blocking hooks. Do not commit real project rules.";
103
- rules._meta.scope = scopeName;
104
- rules._meta.updated = new Date().toISOString().slice(0, 10);
105
- if (firstProject) rules.projects[0].name = firstProject;
106
- writeJson(rulesPath, rules);
107
- }
108
-
109
- writeEnv(ENV_FILE, [
110
- ["MNEMO_DB", dbPath],
111
- ["MNEMO_OWNER_NAME", ownerName],
112
- ["MNEMO_DEFAULT_SCOPE", scopeName],
113
- ["MNEMO_SCOPE", scopeName],
114
- ["MNEMO_DEFAULT_AGENT", primaryAgent],
115
- ["MNEMO_AGENT", primaryAgent],
116
- ["MNEMO_LOCAL_AGENTS", agents.join(",")],
117
- ["MNEMO_FACTS_DIR", factsDir],
118
- ["MNEMO_TZ_OFFSET_HOURS", tz]
119
- ]);
120
-
121
- writeEnv(HOOK_ENV_FILE, [
122
- ["MNEMO_OWNER_NAME", ownerName],
123
- ["MNEMO_DEFAULT_SCOPE", scopeName],
124
- ["MNEMO_SCOPE", scopeName],
125
- ["MNEMO_DEFAULT_AGENT", primaryAgent],
126
- ["MNEMO_AGENT", primaryAgent],
127
- ["MNEMO_FACTS_DIR", factsDir],
128
- ["MNEMO_PROJECT", firstProject]
129
- ]);
130
-
131
- db.close();
132
-
133
- console.log(` OK DB initialized at ${dbPath}`);
134
- console.log(` OK Settings written to ${ENV_FILE}`);
135
- console.log(` OK Private facts written to ${factsPath}`);
136
- console.log(` OK Private project-rule seed written to ${rulesPath}`);
137
- console.log(` OK Hook env written to ${HOOK_ENV_FILE}`);
@@ -1,226 +0,0 @@
1
- "use strict";
2
-
3
- const { parseMaybeJson, normalizeAgentName } = require("./shared_utils");
4
-
5
- function nowIso() {
6
- return new Date().toISOString();
7
- }
8
-
9
- function safeJson(value, fallback) {
10
- try { return JSON.stringify(value == null ? fallback : value); } catch { return JSON.stringify(fallback || {}); }
11
- }
12
-
13
- function markStaleAgentsOffline(db, staleSec = 300) {
14
- const seconds = Math.max(30, Number(staleSec || 300));
15
- try {
16
- const info = db.prepare(
17
- "UPDATE agent_registry SET status='offline' " +
18
- "WHERE status<>'offline' AND (last_seen_at IS NULL OR (julianday('now') - julianday(last_seen_at)) * 86400 > ?)"
19
- ).run(seconds);
20
- return info.changes || 0;
21
- } catch {
22
- return 0;
23
- }
24
- }
25
-
26
- function requeueStaleDispatchedBriefs(db, options = {}) {
27
- const olderThanMinutes = Math.max(1, Math.min(Number(options.older_than_minutes || options.minutes || process.env.MNEMO_BRIEF_REQUEUE_MIN || 30), 1440));
28
- const agentStaleSec = Math.max(30, Number(options.agent_stale_sec || process.env.MNEMO_AGENT_OFFLINE_SEC || 300));
29
- const limit = Math.max(1, Math.min(Number(options.limit || 100), 1000));
30
- const dryRun = !!options.dry_run;
31
- const staleBefore = new Date(Date.now() - olderThanMinutes * 60 * 1000).toISOString();
32
- markStaleAgentsOffline(db, agentStaleSec);
33
- const rows = db.prepare(
34
- "SELECT b.id, b.agent_name, b.source_agent, b.channel, b.created_at, b.dispatched_at, " +
35
- "r.status AS agent_status, r.last_seen_at AS agent_last_seen_at " +
36
- "FROM agent_brief b " +
37
- "LEFT JOIN agent_registry r ON lower(r.agent_name)=lower(b.agent_name) " +
38
- "WHERE b.status='dispatched' AND b.dispatched_at IS NOT NULL AND b.dispatched_at < ? " +
39
- "AND (r.agent_name IS NULL OR r.status='offline' OR r.last_seen_at IS NULL OR (julianday('now') - julianday(r.last_seen_at)) * 86400 > ?) " +
40
- "ORDER BY b.dispatched_at ASC LIMIT ?"
41
- ).all(staleBefore, agentStaleSec, limit);
42
- if (dryRun || !rows.length) {
43
- return { ok: true, requeued: 0, candidates: rows, stale_before: staleBefore, older_than_minutes: olderThanMinutes, agent_stale_sec: agentStaleSec, dry_run: dryRun };
44
- }
45
- const stamp = nowIso();
46
- const update = db.prepare("UPDATE agent_brief SET status='pending', dispatched_at=NULL, outcome=COALESCE(outcome, ?) WHERE id=? AND status='dispatched'");
47
- const react = db.prepare("INSERT INTO agent_brief_reaction (brief_id, agent_name, kind, payload) VALUES (?,?,?,?)");
48
- let changed = 0;
49
- const tx = db.transaction((items) => {
50
- for (const row of items) {
51
- const reason = {
52
- auto_requeue: true,
53
- reason: "dispatched brief stale and target agent offline or not heartbeating",
54
- previous_status: "dispatched",
55
- dispatched_at: row.dispatched_at,
56
- agent_status: row.agent_status || "unregistered",
57
- agent_last_seen_at: row.agent_last_seen_at || null,
58
- older_than_minutes: olderThanMinutes,
59
- agent_stale_sec: agentStaleSec,
60
- requeued_at: stamp
61
- };
62
- const info = update.run("auto-requeued at " + stamp + ": target agent offline/stale", row.id);
63
- if (info.changes) {
64
- changed += info.changes;
65
- react.run(row.id, "mnemo-auto-requeue", "auto_requeue", safeJson(reason, {}));
66
- }
67
- }
68
- });
69
- tx(rows);
70
- return { ok: true, requeued: changed, candidates: rows, stale_before: staleBefore, older_than_minutes: olderThanMinutes, agent_stale_sec: agentStaleSec };
71
- }
72
-
73
- function agentAgeSec(lastSeenAt) {
74
- const t = Date.parse(lastSeenAt || "");
75
- if (!Number.isFinite(t)) return null;
76
- return Math.max(0, Math.round((Date.now() - t) / 1000));
77
- }
78
-
79
- function shouldReplaceSubscriber(existing, next) {
80
- if (!existing) return true;
81
- if (next.active !== existing.active) return next.active;
82
- const nextRegistered = next.status !== "unregistered";
83
- const existingRegistered = existing.status !== "unregistered";
84
- if (nextRegistered !== existingRegistered) return nextRegistered;
85
- if (next.last_seen_age_sec == null) return false;
86
- if (existing.last_seen_age_sec == null) return true;
87
- if (next.last_seen_age_sec !== existing.last_seen_age_sec) return next.last_seen_age_sec < existing.last_seen_age_sec;
88
- return String(next.subscribed_at || "") > String(existing.subscribed_at || "");
89
- }
90
-
91
- function channelListWithSubscribers(db, options = {}) {
92
- const activeWindowSec = Math.max(30, Number(options.active_window_sec || process.env.MNEMO_CHANNEL_ACTIVE_SEC || 300));
93
- const includeSubscribers = options.include_subscribers !== false;
94
- markStaleAgentsOffline(db, activeWindowSec);
95
- const rows = db.prepare(
96
- "SELECT c.name, c.description, c.created_at, " +
97
- "(SELECT COUNT(DISTINCT lower(s.agent_name)) FROM channel_subscription s WHERE s.channel_name = c.name) AS subscribers " +
98
- "FROM channel c ORDER BY c.created_at ASC"
99
- ).all();
100
- if (!includeSubscribers) return { ok: true, count: rows.length, channels: rows, active_window_sec: activeWindowSec };
101
- const subStmt = db.prepare(
102
- "SELECT s.agent_name, s.subscribed_at, r.agent_name AS registry_agent_name, r.display_name, r.host, r.pid, r.status, r.last_seen_at, r.skills_json, r.meta_json, " +
103
- "(SELECT COUNT(*) FROM agent_brief b WHERE b.channel=s.channel_name AND lower(b.agent_name)=lower(s.agent_name) AND b.status='pending') AS pending_briefs, " +
104
- "(SELECT COUNT(*) FROM agent_brief b WHERE b.channel=s.channel_name AND lower(b.agent_name)=lower(s.agent_name) AND b.status='dispatched') AS dispatched_briefs " +
105
- "FROM channel_subscription s " +
106
- "LEFT JOIN agent_registry r ON lower(r.agent_name)=lower(s.agent_name) " +
107
- "WHERE s.channel_name=? ORDER BY s.agent_name ASC"
108
- );
109
- const channels = rows.map((row) => {
110
- const rawDetails = subStmt.all(row.name).map((sub) => {
111
- const age = agentAgeSec(sub.last_seen_at);
112
- const status = sub.status || "unregistered";
113
- const active = ["online", "busy", "idle"].includes(String(status).toLowerCase()) && age != null && age <= activeWindowSec;
114
- return {
115
- agent_name: sub.registry_agent_name || sub.agent_name,
116
- display_name: sub.display_name || sub.registry_agent_name || sub.agent_name,
117
- subscribed_at: sub.subscribed_at,
118
- status,
119
- active,
120
- last_seen_at: sub.last_seen_at || null,
121
- last_seen_age_sec: age,
122
- host: sub.host || null,
123
- pid: sub.pid || null,
124
- skills: parseMaybeJson(sub.skills_json, []) || [],
125
- meta: parseMaybeJson(sub.meta_json, null),
126
- pending_briefs: sub.pending_briefs || 0,
127
- dispatched_briefs: sub.dispatched_briefs || 0
128
- };
129
- });
130
- const unique = new Map();
131
- for (const detail of rawDetails) {
132
- const key = normalizeAgentName(detail.agent_name);
133
- const existing = unique.get(key);
134
- if (shouldReplaceSubscriber(existing, detail)) unique.set(key, detail);
135
- }
136
- const details = Array.from(unique.values()).sort((a, b) => normalizeAgentName(a.agent_name).localeCompare(normalizeAgentName(b.agent_name)));
137
- return Object.assign({}, row, {
138
- subscribers: details.length,
139
- active_subscribers: details.filter((sub) => sub.active).length,
140
- offline_subscribers: details.filter((sub) => !sub.active).length,
141
- subscribers_detail: details
142
- });
143
- });
144
- return { ok: true, count: channels.length, channels, active_window_sec: activeWindowSec };
145
- }
146
-
147
- function pushCandidate(candidates, id, source) {
148
- const value = parseInt(id, 10);
149
- if (Number.isFinite(value) && value > 0) candidates.push({ id: value, source });
150
- }
151
-
152
- function collectTaskIdsFromText(text, source, candidates) {
153
- const patterns = [
154
- /(?:Autonomy task|Blocked autonomy review)\s*#\s*(\d+)/gi,
155
- /\bautonomy[_\s-]*task[_\s-]*id["':=\s]+(\d+)/gi,
156
- /\bblocked[_\s-]*autonomy[_\s-]*task[_\s-]*id["':=\s]+(\d+)/gi,
157
- /\btask[_\s-]*id["':=\s]+(\d+)/gi
158
- ];
159
- for (const re of patterns) {
160
- let match;
161
- while ((match = re.exec(String(text || "")))) pushCandidate(candidates, match[1], source);
162
- }
163
- }
164
-
165
- function collectTaskIdsFromMeta(meta, source, candidates) {
166
- const keys = ["autonomy_task_id", "blocked_autonomy_task_id", "task_id", "source_task_id", "autonomyTaskId", "blockedAutonomyTaskId"];
167
- for (const key of keys) pushCandidate(candidates, meta && meta[key], source + "." + key);
168
- }
169
-
170
- function resolveAutonomyTaskUpdateId(db, inputId) {
171
- const raw = parseInt(inputId, 10);
172
- if (!Number.isFinite(raw)) return { id: inputId, error: "invalid id" };
173
- const direct = db.prepare("SELECT id FROM autonomy_task WHERE id=?").get(raw);
174
- if (direct) return { id: raw, resolved_from: "autonomy_task.id" };
175
-
176
- const candidates = [];
177
- let inputKind = "unknown";
178
- try {
179
- const brief = db.prepare("SELECT id, content, meta_json FROM agent_brief WHERE id=?").get(raw);
180
- if (brief) {
181
- inputKind = "agent_brief";
182
- const meta = parseMaybeJson(brief.meta_json, {}) || {};
183
- collectTaskIdsFromMeta(meta, "agent_brief.meta", candidates);
184
- collectTaskIdsFromText(brief.content, "agent_brief.content", candidates);
185
- }
186
- } catch {}
187
- try {
188
- const reverseRows = db.prepare(
189
- "SELECT id FROM autonomy_task WHERE source_id=? " +
190
- "OR meta_json LIKE ? OR meta_json LIKE ? OR meta_json LIKE ? OR checklist_json LIKE ? OR checklist_json LIKE ? LIMIT 20"
191
- ).all(
192
- String(raw),
193
- '%"brief_id":' + raw + '%',
194
- '%"agent_brief_id":' + raw + '%',
195
- '%"source_brief_id":' + raw + '%',
196
- '%"brief_id":' + raw + '%',
197
- '%"agent_brief_id":' + raw + '%'
198
- );
199
- for (const row of reverseRows) pushCandidate(candidates, row.id, "autonomy_task.reverse_link");
200
- } catch {}
201
- try {
202
- const mem = db.prepare("SELECT id, text, meta_json FROM memory WHERE id=?").get(raw);
203
- if (mem) {
204
- if (inputKind === "unknown") inputKind = "memory";
205
- const meta = parseMaybeJson(mem.meta_json, {}) || {};
206
- collectTaskIdsFromMeta(meta, "memory.meta", candidates);
207
- collectTaskIdsFromText(mem.text, "memory.text", candidates);
208
- }
209
- } catch {}
210
-
211
- const seen = new Set();
212
- for (const candidate of candidates) {
213
- if (!candidate || seen.has(candidate.id)) continue;
214
- seen.add(candidate.id);
215
- const row = db.prepare("SELECT id FROM autonomy_task WHERE id=?").get(candidate.id);
216
- if (row) return { id: candidate.id, resolved_from: candidate.source, input_id: raw, input_kind: inputKind, candidates };
217
- }
218
- return { id: raw, error: "task not found", input_kind: inputKind, candidates };
219
- }
220
-
221
- module.exports = {
222
- markStaleAgentsOffline,
223
- requeueStaleDispatchedBriefs,
224
- channelListWithSubscribers,
225
- resolveAutonomyTaskUpdateId
226
- };