mulmoclaude 0.9.0 → 0.9.2

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 (458) hide show
  1. package/README.md +95 -38
  2. package/bin/mulmoclaude.js +1 -2
  3. package/client/assets/JsonEditor-CPJfn76E.css +1 -0
  4. package/client/assets/JsonEditor-CoWGJG3Y.js +10 -0
  5. package/client/assets/abnfDiagram-VRR7QNED-6nNByj6v-By7GJ3xW.js +1 -0
  6. package/client/assets/abnfDiagram-VRR7QNED-BrQlVixL.js +1 -0
  7. package/client/assets/arc-BXutyUAX.js +1 -0
  8. package/client/assets/arc-zT0wd74V-DulGJNnb.js +1 -0
  9. package/client/assets/architecture-TIHT7OUA-CYMWc3UT-C7HoFzWN.js +1 -0
  10. package/client/assets/architecture-TIHT7OUA-aml8u-G9.js +1 -0
  11. package/client/assets/architectureDiagram-ZJ3FMSHR-Bgnyaj_i-CCpEsCHN.js +36 -0
  12. package/client/assets/architectureDiagram-ZJ3FMSHR-DJTFpPjB.js +36 -0
  13. package/client/assets/array-BifhSqXX.js +1 -0
  14. package/client/assets/array-CApNbSU9-BifhSqXX.js +1 -0
  15. package/client/assets/blockDiagram-677ZJIJ3-DQ35o5E4-BXS11D3J.js +132 -0
  16. package/client/assets/blockDiagram-677ZJIJ3-aYvCODxv.js +132 -0
  17. package/client/assets/c4Diagram-LMCZKHZV-Bau6RMBb.js +10 -0
  18. package/client/assets/c4Diagram-LMCZKHZV-ClWZeiWo-DXGnOOUf.js +10 -0
  19. package/client/assets/channel-D9VSi_QV.js +1 -0
  20. package/client/assets/channel-Di5rtkx0-C3gZcytF.js +1 -0
  21. package/client/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  22. package/client/assets/chunk-2Q5K7J3B-DfKpwyl9-DTxwf5E9.js +1 -0
  23. package/client/assets/chunk-32BRIVSS-CCt9wtYd-Cwa_IP35.js +1 -0
  24. package/client/assets/chunk-32BRIVSS-CxzHeys5.js +1 -0
  25. package/client/assets/chunk-52WLFC77-BtNjbTdw.js +10 -0
  26. package/client/assets/chunk-52WLFC77-FbBbR4uI-wsNC5d-f.js +10 -0
  27. package/client/assets/chunk-5VM5RSS4-BYnnUiN6-C4rOnu9A.js +15 -0
  28. package/client/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
  29. package/client/assets/chunk-7BUUIJ7U-Bb538aSH.js +1 -0
  30. package/client/assets/chunk-7BUUIJ7U-hh8aCuGX-mGEpPzQy.js +1 -0
  31. package/client/assets/chunk-C7G6YPKG-BE8ehsnc.js +1 -0
  32. package/client/assets/chunk-C7G6YPKG-C87hlS9c-BitbJpTa.js +1 -0
  33. package/client/assets/{chunk-D8eiyYIV-BY16KEZc.js → chunk-D8eiyYIV-BeeEsA1B.js} +1 -1
  34. package/client/assets/chunk-EX3LRPZG-Bhgskzyy.js +231 -0
  35. package/client/assets/chunk-EX3LRPZG-BqGqMXLN-Cl2Eo1_u.js +231 -0
  36. package/client/assets/chunk-FWX5IMBZ-BkbSAAuW-C2r4AuAO.js +2 -0
  37. package/client/assets/chunk-FWX5IMBZ-D9sskZb_.js +2 -0
  38. package/client/assets/chunk-HOUHSVGY-CBCXk7rb.js +1 -0
  39. package/client/assets/chunk-HOUHSVGY-Cxu0eDlh-owg_DcY0.js +1 -0
  40. package/client/assets/chunk-ICXQ74PX-DTqPpDQ9.js +2 -0
  41. package/client/assets/chunk-ICXQ74PX-hiraF_Xj-CdaEwVin.js +2 -0
  42. package/client/assets/chunk-JWPE2WC7-BQ3zXr2k-DSd3Ct95.js +1 -0
  43. package/client/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  44. package/client/assets/chunk-KEIR6QF5-DNzq6p3w.js +161 -0
  45. package/client/assets/chunk-MOJQB5TN-CqxshQHA-Cn_EpDyZ.js +88 -0
  46. package/client/assets/chunk-MOJQB5TN-D1s_zUGz.js +88 -0
  47. package/client/assets/chunk-OGEWGWER-CjCr7ceX-Dfk5-70y.js +1 -0
  48. package/client/assets/chunk-OGEWGWER-DzfhxoQd.js +1 -0
  49. package/client/assets/chunk-PUDLZKDR-BZlebNhn.js +156 -0
  50. package/client/assets/chunk-PUDLZKDR-Dx6M-vz1-CLyVurOz.js +156 -0
  51. package/client/assets/chunk-Q4XR5HBZ-BcJb7mwA.js +70 -0
  52. package/client/assets/chunk-Q4XR5HBZ-CZd-9lTB-qPEYoRNc.js +11 -0
  53. package/client/assets/chunk-RYQCIY6F-B_IgMG7T.js +1 -0
  54. package/client/assets/chunk-RYQCIY6F-YkbemkCt-CX4fncTQ.js +1 -0
  55. package/client/assets/chunk-V7JOEXUC-Buce04o6.js +206 -0
  56. package/client/assets/chunk-V7JOEXUC-rI0xlC_O-C607vJXy.js +206 -0
  57. package/client/assets/chunk-VAUOI2AC-CxhkzXN0.js +1 -0
  58. package/client/assets/chunk-VAUOI2AC-DrcykVNK-CSROJWdE.js +1 -0
  59. package/client/assets/chunk-VR4S4FIN-D5afNrsS.js +1 -0
  60. package/client/assets/chunk-VR4S4FIN-O6iF8Yvf-CLIwrgqU.js +1 -0
  61. package/client/assets/chunk-WYO6CB5R-B83L_z6I-Cs8mg9If.js +127 -0
  62. package/client/assets/chunk-WYO6CB5R-BXTIdTMw.js +125 -0
  63. package/client/assets/chunk-XXDRQBXY-DFXH_lWn-B5HjCp2c.js +1 -0
  64. package/client/assets/chunk-XXDRQBXY-DXMD6ofA.js +1 -0
  65. package/client/assets/chunk-Y2CYZVJY-Bdt8pFDJ-DsF7k-Jl.js +1 -0
  66. package/client/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  67. package/client/assets/chunk-ZGVPDNZ5-BpFv9JSP-CHYySMjV.js +62 -0
  68. package/client/assets/chunk-ZGVPDNZ5-CYusI0J_.js +62 -0
  69. package/client/assets/chunk-ZIRB5QZD-Biy6ZNFG-D1maAiXb.js +32 -0
  70. package/client/assets/chunk-ZIRB5QZD-C6fEPe3t.js +32 -0
  71. package/client/assets/classDiagram-OUVF2IWQ-BgAZMSbT-BgxEE1D3.js +1 -0
  72. package/client/assets/classDiagram-OUVF2IWQ-CBD3Eidl.js +1 -0
  73. package/client/assets/classDiagram-v2-EOCWNBFH-CBD3Eidl.js +1 -0
  74. package/client/assets/classDiagram-v2-EOCWNBFH-DxHTyui1-BgxEE1D3.js +1 -0
  75. package/client/assets/cose-bilkent-JH36ORCC-CuSL2tA8-aMIqISfj.js +1 -0
  76. package/client/assets/cose-bilkent-JH36ORCC-WAJDBXv1.js +1 -0
  77. package/client/assets/cynefin-VYW2F7L2-DH2qkJKw.js +1 -0
  78. package/client/assets/cynefin-VYW2F7L2-DqA3n9nY-BNWhIK_n.js +1 -0
  79. package/client/assets/cynefinDiagram-TSTJHNR4-CUvPV9MV.js +62 -0
  80. package/client/assets/cynefinDiagram-TSTJHNR4-x0-0sQ15-Cq1gFcFu.js +62 -0
  81. package/client/assets/cytoscape.esm-CzdwbRaj-Djp6vQyU.js +321 -0
  82. package/client/assets/cytoscape.esm-Djp6vQyU.js +321 -0
  83. package/client/assets/dagre-CXRCoUWR.js +1 -0
  84. package/client/assets/dagre-VKFMJZFB-CQdfl-bx-CzZZuace.js +4 -0
  85. package/client/assets/dagre-VKFMJZFB-C_9IS7mB.js +4 -0
  86. package/client/assets/dagre-wczQIDso-CfevN9RO.js +1 -0
  87. package/client/assets/defaultLocale-C8Fc0cco.js +1 -0
  88. package/client/assets/defaultLocale-DUNguUWs-BbDo_yJX.js +1 -0
  89. package/client/assets/diagram-FQU43EPY-BOSB6VUb-isPdQ8WX.js +3 -0
  90. package/client/assets/diagram-FQU43EPY-BP8N00-b.js +3 -0
  91. package/client/assets/diagram-G47NLZAW-DLXrcXsN-BIqj7RKy.js +24 -0
  92. package/client/assets/diagram-G47NLZAW-ulE1JlWG.js +24 -0
  93. package/client/assets/diagram-NH7WQ7WH-BMQp1rkF-D6-fOq_v.js +24 -0
  94. package/client/assets/diagram-NH7WQ7WH-D_IXrL3i.js +24 -0
  95. package/client/assets/diagram-OA4YK3LP-C-pC6Eyu.js +30 -0
  96. package/client/assets/diagram-OA4YK3LP-D1wQ0vUj-BNi6QLCK.js +30 -0
  97. package/client/assets/diagram-WEI45ONY-Di9m35i-.js +41 -0
  98. package/client/assets/diagram-WEI45ONY-RR0DpF8R-BS3nrb3w.js +41 -0
  99. package/client/assets/dist-BQBs5pjy-BmtZ7Oc2.js +1 -0
  100. package/client/assets/dist-CQ3HaWOk.js +1 -0
  101. package/client/assets/ebnfDiagram-CCIWWBDH-Cbwnim2x.js +1 -0
  102. package/client/assets/ebnfDiagram-CCIWWBDH-M123uVJ8-9-dq55nQ.js +1 -0
  103. package/client/assets/erDiagram-Q63AITRT-BWx_-PXG-CWGfG4z5.js +85 -0
  104. package/client/assets/erDiagram-Q63AITRT-CMbtO3Sm.js +85 -0
  105. package/client/assets/eventmodeling-45OFAUF4--32SIpkL.js +1 -0
  106. package/client/assets/eventmodeling-45OFAUF4-_BVSjAXf-DQdL0Icr.js +1 -0
  107. package/client/assets/flowDiagram-23GEKE2U-BeOc_anm-CuVzKmmU.js +1 -0
  108. package/client/assets/flowDiagram-23GEKE2U-Dofa_qxG.js +1 -0
  109. package/client/assets/ganttDiagram-NO4QXBWP-BOoJ1eTw-TWoNmSvq.js +292 -0
  110. package/client/assets/ganttDiagram-NO4QXBWP-BgoAVKuc.js +292 -0
  111. package/client/assets/gitGraph-TEB2WS4Q-CH12KLTN-Bz4frAhV.js +1 -0
  112. package/client/assets/gitGraph-TEB2WS4Q-DIMvNvqt.js +1 -0
  113. package/client/assets/gitGraphDiagram-IHSO6WYX-B2CJhk_G-ClOKkjxw.js +106 -0
  114. package/client/assets/gitGraphDiagram-IHSO6WYX-Dmb6KnPz.js +106 -0
  115. package/client/assets/graphlib-B8gBHxth.js +1 -0
  116. package/client/assets/graphlib-hY-1btwe-DQjxxcnr.js +1 -0
  117. package/client/assets/{html2canvas-CDGcmOD3-CKJ6vKPo.js → html2canvas-CDGcmOD3-DRL9pFVl.js} +2 -2
  118. package/client/assets/{index-9lmYSaus.js → index-Dc0R-HW5.js} +129 -190
  119. package/client/assets/index-Dxo1Zdd-.css +2 -0
  120. package/client/assets/{index.es-DqtpmBm8-DFXjJgCa.js → index.es-DqtpmBm8-EQk3NgR8.js} +1 -1
  121. package/client/assets/info-DKCQHKI2-Cbw3mbiK-GsDZz9IO.js +1 -0
  122. package/client/assets/info-DKCQHKI2-ViCqobGo.js +1 -0
  123. package/client/assets/infoDiagram-FWYZ7A6U-HKV7LIG-.js +2 -0
  124. package/client/assets/infoDiagram-FWYZ7A6U-Mp1X3pBP-ATJv87Ur.js +2 -0
  125. package/client/assets/init-D6jRqBbL.js +1 -0
  126. package/client/assets/init-DEsX3bhM-D6jRqBbL.js +1 -0
  127. package/client/assets/ishikawaDiagram-FXEZZL3T-BNG7tkJu-CGCeOIlJ.js +70 -0
  128. package/client/assets/ishikawaDiagram-FXEZZL3T-CVDUj46f.js +70 -0
  129. package/client/assets/journeyDiagram-5HDEW3XC-BA-ESGLP.js +139 -0
  130. package/client/assets/journeyDiagram-5HDEW3XC-Dbp_hY9X-Bx-IoCe9.js +139 -0
  131. package/client/assets/kanban-definition-HUTT4EX6-Bqaet01L.js +89 -0
  132. package/client/assets/kanban-definition-HUTT4EX6-DSTc5u3q-C0JGckt1.js +89 -0
  133. package/client/assets/katex-CddkPoXu.js +257 -0
  134. package/client/assets/katex-M0IxphGf-CddkPoXu.js +257 -0
  135. package/client/assets/lib-4Tgx7rAy.js +114 -0
  136. package/client/assets/line-B1wBwzrY-f5wxpqoF.js +1 -0
  137. package/client/assets/line-CkyHfW7d.js +1 -0
  138. package/client/assets/linear-B9fuEF4c.js +1 -0
  139. package/client/assets/linear-lrGinF5_-CqNBync7.js +1 -0
  140. package/client/assets/map-CgrwEyH7-DWQFomlZ.js +1 -0
  141. package/client/assets/map-DsCK-0Cs.js +1 -0
  142. package/client/assets/marked.esm-CIU5FDdN.js +64 -0
  143. package/client/assets/marp-CSq0PPfK.js +3448 -0
  144. package/client/assets/material-symbols-outlined-DdRFxZLh.woff2 +0 -0
  145. package/client/assets/mermaid-parser.core-DC7NPJ_M-Ca6XzwfM.js +166 -0
  146. package/client/assets/mermaid-parser.core-SAwSf4_o.js +7 -0
  147. package/client/assets/mermaid.core-BBEQfkdJ.js +11 -0
  148. package/client/assets/mermaid.core-DZM3Ha-E-BxOo-RYG.js +11 -0
  149. package/client/assets/mindmap-definition-LN4V7U3C-B4BN0efL.js +96 -0
  150. package/client/assets/mindmap-definition-LN4V7U3C-DYtgcMsY-DynyLTNv.js +96 -0
  151. package/client/assets/ordinal-B9_Llu10-CU85fhaB.js +1 -0
  152. package/client/assets/ordinal-CopWnP7w.js +1 -0
  153. package/client/assets/packet-7NZHBO7P-CY4XRk9N.js +1 -0
  154. package/client/assets/packet-7NZHBO7P-lwb58iYx--vqSg65J.js +1 -0
  155. package/client/assets/path-BWPyau1x.js +1 -0
  156. package/client/assets/path-COivZ1Gw-C5riojK2.js +1 -0
  157. package/client/assets/pegDiagram-2B236MQR-BOKErjUu.js +1 -0
  158. package/client/assets/pegDiagram-2B236MQR-C43eIpKM-Bi_5Sxjt.js +1 -0
  159. package/client/assets/pie-RZYD4A2V-6BHB7bAx.js +1 -0
  160. package/client/assets/pie-RZYD4A2V-B1UWb4Gu-Dmn2hLWH.js +1 -0
  161. package/client/assets/pieDiagram-ENE6RG2P-BkTqgJyR-Bcdm19kR.js +39 -0
  162. package/client/assets/pieDiagram-ENE6RG2P-DtNjvz-U.js +39 -0
  163. package/client/assets/preload-helper-CZgWQFsJ.js +1 -0
  164. package/client/assets/purify.es-DY32g7DN.js +3 -0
  165. package/client/assets/quadrantDiagram-ABIIQ3AL-BQmAJL2v.js +7 -0
  166. package/client/assets/quadrantDiagram-ABIIQ3AL-Bm1Zjm45-B3orqx_f.js +7 -0
  167. package/client/assets/radar-I7S5WNFK-7CKcb_l--CqKdnR0v.js +1 -0
  168. package/client/assets/radar-I7S5WNFK-R7Jhjfdt.js +1 -0
  169. package/client/assets/railroad-3IZDKUUU-BepSPyHI.js +1 -0
  170. package/client/assets/railroad-3IZDKUUU-gCySKdnW-CKU26HTP.js +1 -0
  171. package/client/assets/railroad-abnf-AHOZXSZD-BlsHsp3c.js +1 -0
  172. package/client/assets/railroad-abnf-AHOZXSZD-BophH4r--CGkGHq54.js +1 -0
  173. package/client/assets/railroad-ebnf-EBAXGLYW-AZNjl_Zu-B7bn_PF3.js +1 -0
  174. package/client/assets/railroad-ebnf-EBAXGLYW-B4fMcGEH.js +1 -0
  175. package/client/assets/railroad-peg-LSFZ7HO6-B1ZrjJIu.js +1 -0
  176. package/client/assets/railroad-peg-LSFZ7HO6-BSiEEyeb-CP_B-N5g.js +1 -0
  177. package/client/assets/railroadDiagram-RFXS5EU6-8cz0Iby3.js +1 -0
  178. package/client/assets/railroadDiagram-RFXS5EU6-BkfbdeAs-Di6jH5I6.js +1 -0
  179. package/client/assets/requirementDiagram-TGXJPOKE-CrGTTjYg-DmIC7Shp.js +84 -0
  180. package/client/assets/requirementDiagram-TGXJPOKE-Dlqoe9TY.js +84 -0
  181. package/client/assets/rough.esm-CSKSodPl.js +1 -0
  182. package/client/assets/rough.esm-wVmwlXu7-CSKSodPl.js +1 -0
  183. package/client/assets/runtime-protocol-vue-WG3JLsjz.js +1 -0
  184. package/client/assets/runtime-vue-lHsY5zMj.js +1 -0
  185. package/client/assets/sankeyDiagram-HTMAVEWB-BkTKgu8Q.js +40 -0
  186. package/client/assets/sankeyDiagram-HTMAVEWB-rWXPf03Z-CjV9pCSJ.js +40 -0
  187. package/client/assets/{schemas-D_RbFtuQ.js → schemas-DGvl73AE.js} +3 -3
  188. package/client/assets/sequenceDiagram-DBY2YBRQ-BpuXUcFy.js +162 -0
  189. package/client/assets/sequenceDiagram-DBY2YBRQ-nkJYWO2m-BqS_sTCH.js +162 -0
  190. package/client/assets/sizeCapture-X5ZJPWSS-B0uUizjq.js +1 -0
  191. package/client/assets/sizeCapture-X5ZJPWSS-F5SadAuT-VHIb4_NU.js +1 -0
  192. package/client/assets/src-Brzfja-q-DNc4Or4z.js +1 -0
  193. package/client/assets/src-Cqa3Jy1j.js +1 -0
  194. package/client/assets/stateDiagram-2N3HPSRC-CdlGXuo7.js +1 -0
  195. package/client/assets/stateDiagram-2N3HPSRC-T4-clK8b-DQRiB4va.js +1 -0
  196. package/client/assets/stateDiagram-v2-6OUMAXLB-BN8Jr3ZM.js +1 -0
  197. package/client/assets/stateDiagram-v2-6OUMAXLB-DIp7nhRd-DbrOhUn_.js +1 -0
  198. package/client/assets/swimlanes-5IMT3BWC-HmQNEntu-CNBgZdur.js +2 -0
  199. package/client/assets/swimlanes-5IMT3BWC-iEJg5gki.js +2 -0
  200. package/client/assets/swimlanesDiagram-G3AALYLV-BeoZhwg7-DpqgeNRA.js +8 -0
  201. package/client/assets/swimlanesDiagram-G3AALYLV-o-sS6aEP.js +8 -0
  202. package/client/assets/timeline-definition-FHXFAJF6-Bjh-7QmL.js +120 -0
  203. package/client/assets/timeline-definition-FHXFAJF6-CNc9jSTP-BKNSymgY.js +120 -0
  204. package/client/assets/treeView-QDETBFTQ-D3cqRl6k.js +1 -0
  205. package/client/assets/treeView-QDETBFTQ-nIQcG1h9-O_ri9HxD.js +1 -0
  206. package/client/assets/treemap-6X3UGDF4-BnsvC8yL-Cfsty1e3.js +1 -0
  207. package/client/assets/treemap-6X3UGDF4-DGkZcvDG.js +1 -0
  208. package/client/assets/v4-B29ayslu.js +1 -0
  209. package/client/assets/vennDiagram-L72KCM5P-Cz3dbe7b.js +34 -0
  210. package/client/assets/vennDiagram-L72KCM5P-Dr3pTJ_0-C38xwcVo.js +34 -0
  211. package/client/assets/vue-C6d2VveO.js +1 -0
  212. package/client/assets/vue-i18n-CL-ejuNu.js +3 -0
  213. package/client/assets/vue.runtime.esm-bundler-BeoTfMNc.js +4 -0
  214. package/client/assets/wardley-OPB4EBWU-8Odxkx6V-CCDIVuBs.js +1 -0
  215. package/client/assets/wardley-OPB4EBWU-CZsCDvKk.js +1 -0
  216. package/client/assets/wardleyDiagram-EHGQE667-DSFc7ZZa-mlWXRiWx.js +78 -0
  217. package/client/assets/wardleyDiagram-EHGQE667-DiyoyO_X.js +78 -0
  218. package/client/assets/xychartDiagram-FW5EYKEG-BP0Nn4Pp-DRRiStGZ.js +7 -0
  219. package/client/assets/xychartDiagram-FW5EYKEG-DhY1_UGM.js +7 -0
  220. package/client/index.html +16 -12
  221. package/package.json +17 -19
  222. package/server/agent/backend/types.ts +1 -1
  223. package/server/agent/backgroundSessions.ts +43 -0
  224. package/server/agent/config.ts +3 -2
  225. package/server/agent/mcp-tools/manageCollection.ts +4 -4
  226. package/server/agent/sandboxMounts.ts +1 -1
  227. package/server/agent/stream.ts +1 -3
  228. package/server/api/auth/viewToken.ts +1 -1
  229. package/server/api/bridge/sessionRole.ts +47 -0
  230. package/server/api/routes/agent.ts +79 -2
  231. package/server/api/routes/collections.ts +60 -7
  232. package/server/api/routes/collectionsRegistry.ts +113 -0
  233. package/server/api/routes/dashboard.ts +47 -0
  234. package/server/api/routes/feeds.ts +2 -2
  235. package/server/api/routes/files.ts +1 -2
  236. package/server/api/routes/pdf.ts +48 -9
  237. package/server/api/routes/plugins.ts +2 -2
  238. package/server/api/routes/remoteHost.ts +55 -0
  239. package/server/api/routes/sessions.ts +20 -11
  240. package/server/api/routes/share.ts +105 -0
  241. package/server/api/routes/transcribe.ts +1 -1
  242. package/server/api/routes/wiki/history.ts +2 -2
  243. package/server/api/routes/wiki.ts +29 -177
  244. package/server/api/sandboxStatus.ts +1 -1
  245. package/server/build/dispatcher.mjs +25 -14928
  246. package/server/events/collection-change.ts +4 -4
  247. package/server/events/file-change.ts +2 -2
  248. package/server/events/scheduler-adapter.ts +3 -3
  249. package/server/events/task-manager/index.ts +3 -3
  250. package/server/index.ts +53 -17
  251. package/server/notifier/engine.ts +3 -3
  252. package/server/notifier/types.ts +2 -2
  253. package/server/plugins/html-builtin.ts +15 -1
  254. package/server/prompts/system/system.md +4 -0
  255. package/server/remoteHost/auth.ts +29 -0
  256. package/server/remoteHost/commandChannel.ts +56 -0
  257. package/server/remoteHost/firebase.ts +16 -0
  258. package/server/remoteHost/handlers/collectionPage.ts +29 -0
  259. package/server/remoteHost/handlers/getCollection.ts +32 -0
  260. package/server/remoteHost/handlers/getFeed.ts +35 -0
  261. package/server/remoteHost/handlers/index.ts +19 -0
  262. package/server/remoteHost/handlers/listCollections.ts +29 -0
  263. package/server/remoteHost/handlers/listFeeds.ts +37 -0
  264. package/server/remoteHost/handlers/listShortcuts.ts +24 -0
  265. package/server/remoteHost/handlers/startChat.ts +78 -0
  266. package/server/remoteHost/hostRunner.ts +122 -0
  267. package/server/remoteHost/index.ts +117 -0
  268. package/server/system/config.ts +1 -1
  269. package/server/system/credentials.ts +2 -3
  270. package/server/system/docker.ts +9 -8
  271. package/server/system/env.ts +8 -0
  272. package/server/system/whisper/index.ts +4 -4
  273. package/server/utils/claudeConfigPath.ts +57 -0
  274. package/server/utils/files/dashboard-io.ts +87 -0
  275. package/server/utils/files/session-io.ts +11 -0
  276. package/server/utils/markdown/frontmatter.ts +8 -4
  277. package/server/utils/regex.ts +4 -3
  278. package/server/utils/share/packHtml.ts +108 -0
  279. package/server/utils/share/rewriteAssets.ts +178 -0
  280. package/server/workspace/chat-index/paths.ts +8 -2
  281. package/server/workspace/chat-index/summarizer.ts +23 -15
  282. package/server/workspace/collections/configure.ts +5 -3
  283. package/server/workspace/collections/index.ts +8 -6
  284. package/server/workspace/collections/notifications.ts +3 -3
  285. package/server/workspace/collections/types.ts +2 -2
  286. package/server/workspace/collections/watcher.ts +2 -2
  287. package/server/workspace/feeds/configure.ts +24 -0
  288. package/server/workspace/hooks/handlers/skillBridge.ts +2 -2
  289. package/server/workspace/hooks/handlers/wikiSnapshot.ts +1 -1
  290. package/server/workspace/paths.ts +8 -1
  291. package/server/workspace/skills/catalog.ts +1 -3
  292. package/server/workspace/skills/external/catalog.ts +1 -3
  293. package/server/workspace/skills/paths.ts +4 -3
  294. package/server/workspace/skills/writer.ts +1 -4
  295. package/server/workspace/skills-preset.ts +3 -3
  296. package/server/workspace/wiki-pages/io.ts +2 -2
  297. package/server/workspace/workspace.ts +2 -2
  298. package/src/App.vue +41 -18
  299. package/src/components/ChatInput.vue +1 -1
  300. package/src/components/DashboardView.vue +372 -0
  301. package/src/components/FileContentRenderer.vue +32 -7
  302. package/src/components/JsonEditor.vue +1 -1
  303. package/src/components/PluginLauncher.vue +122 -79
  304. package/src/components/RemoteHostControl.vue +159 -0
  305. package/src/components/SessionCountBadges.vue +32 -0
  306. package/src/components/SessionHeaderControls.vue +1 -8
  307. package/src/components/SessionHistoryPanel.vue +2 -0
  308. package/src/components/SessionHistoryToggleButton.vue +1 -15
  309. package/src/components/SidebarHeader.vue +2 -0
  310. package/src/components/collectionTypes.ts +2 -2
  311. package/src/composables/accountingHost.ts +24 -0
  312. package/src/composables/collections/uiHost.ts +17 -2
  313. package/src/composables/useDashboard.ts +191 -0
  314. package/src/composables/useMarkdownZip.ts +51 -0
  315. package/src/composables/useNotifications.ts +1 -4
  316. package/src/composables/useSharePack.ts +60 -0
  317. package/src/composables/useTranslatedQueries.ts +15 -95
  318. package/src/composables/useTranslatedStrings.ts +68 -0
  319. package/src/composables/useVoiceInput.ts +3 -3
  320. package/src/config/apiRoutes.ts +57 -9
  321. package/src/config/createFilePolicy.ts +1 -1
  322. package/src/config/firebase.ts +12 -0
  323. package/src/config/firebaseConfig.ts +18 -0
  324. package/src/config/historyFilters.ts +7 -0
  325. package/src/config/pubsubChannels.ts +7 -27
  326. package/src/config/roles.ts +12 -10
  327. package/src/config/workspacePaths.ts +10 -0
  328. package/src/index.css +1 -1
  329. package/src/lang/de.ts +39 -220
  330. package/src/lang/en.ts +39 -191
  331. package/src/lang/es.ts +39 -218
  332. package/src/lang/fr.ts +39 -220
  333. package/src/lang/ja.ts +39 -216
  334. package/src/lang/ko.ts +39 -216
  335. package/src/lang/pt-BR.ts +39 -217
  336. package/src/lang/zh.ts +39 -215
  337. package/src/main.ts +3 -0
  338. package/src/plugins/accounting/definition.ts +12 -8
  339. package/src/plugins/accounting/index.ts +7 -4
  340. package/src/plugins/accounting/meta.ts +23 -60
  341. package/src/plugins/manageSkills/View.vue +9 -1
  342. package/src/plugins/photoLocations/View.vue +2 -2
  343. package/src/plugins/presentCollection/definition.ts +2 -2
  344. package/src/plugins/presentCollection/plugin.ts +2 -2
  345. package/src/plugins/presentCollection/types.ts +2 -2
  346. package/src/plugins/presentHtml/definition.ts +1 -1
  347. package/src/plugins/presentMulmoScript/View.vue +2 -2
  348. package/src/plugins/presentMulmoScript/helpers.ts +1 -1
  349. package/src/plugins/presentSVG/View.vue +2 -2
  350. package/src/plugins/scheduler/TasksTab.vue +1 -2
  351. package/src/plugins/skill/View.vue +7 -3
  352. package/src/plugins/spreadsheet/View.vue +3 -3
  353. package/src/plugins/spreadsheet/engine/functions/logical.ts +8 -1
  354. package/src/plugins/textResponse/View.vue +43 -16
  355. package/src/plugins/wiki/View.vue +29 -2
  356. package/src/plugins/wiki/components/WikiGraphView.vue +1 -1
  357. package/src/plugins/wiki/components/WikiPageBody.vue +4 -1
  358. package/src/plugins/wiki/helpers.ts +13 -81
  359. package/src/plugins/wiki/index.ts +1 -1
  360. package/src/router/guards.ts +1 -1
  361. package/src/router/index.ts +12 -0
  362. package/src/router/pageRoutes.ts +2 -0
  363. package/src/types/dashboard.ts +40 -0
  364. package/src/types/session.ts +3 -0
  365. package/src/utils/blobDownload.ts +19 -0
  366. package/src/utils/collections/presentSeed.ts +1 -1
  367. package/src/utils/html/customViewSrcdoc.ts +31 -3
  368. package/src/utils/html/previewCsp.ts +1 -1
  369. package/src/utils/id.ts +1 -1
  370. package/src/utils/image/htmlSrcAttrs.ts +1 -1
  371. package/src/utils/markdown/frontmatter.ts +12 -7
  372. package/src/utils/markdown/highlight.ts +22 -0
  373. package/src/utils/markdown/marpCustomSize.ts +2 -2
  374. package/src/utils/markdown/mermaidExtension.ts +56 -0
  375. package/src/utils/markdown/mermaidRender.ts +147 -0
  376. package/src/utils/markdown/setup.ts +17 -4
  377. package/src/utils/markdown/useMermaid.ts +33 -0
  378. package/src/utils/session/longRunning.ts +33 -0
  379. package/src/utils/session/mergeSessions.ts +1 -1
  380. package/client/assets/JsonEditor-Di5xGeZY.css +0 -1
  381. package/client/assets/JsonEditor-o5--tPQH.js +0 -10
  382. package/client/assets/index-tOu5ArRZ.css +0 -2
  383. package/client/assets/lib-D6Xy0IFc.js +0 -114
  384. package/client/assets/marp-D6GXA-EB.js +0 -3452
  385. package/client/assets/material-symbols-outlined-DtIK7AQn.woff2 +0 -0
  386. package/client/assets/runtime-protocol-vue-pU0Mw7Zm.js +0 -1
  387. package/client/assets/runtime-vue-fFYhnNg3.js +0 -1
  388. package/client/assets/vue-UDIWDtr8.js +0 -1
  389. package/client/assets/vue-i18n-CQbxVmNs.js +0 -3
  390. package/client/assets/vue.runtime.esm-bundler-BTyIdNAI.js +0 -4
  391. package/server/accounting/accountNormalize.ts +0 -32
  392. package/server/accounting/defaultAccounts.ts +0 -87
  393. package/server/accounting/eventPublisher.ts +0 -52
  394. package/server/accounting/journal.ts +0 -252
  395. package/server/accounting/openingBalances.ts +0 -114
  396. package/server/accounting/report.ts +0 -237
  397. package/server/accounting/service.ts +0 -718
  398. package/server/accounting/snapshotCache.ts +0 -334
  399. package/server/accounting/timeSeries.ts +0 -265
  400. package/server/accounting/types.ts +0 -148
  401. package/server/api/routes/accounting.ts +0 -373
  402. package/server/api/routes/wiki/frontmatter.ts +0 -34
  403. package/server/api/routes/wiki/pageIndex.ts +0 -53
  404. package/server/system/logs/aaa +0 -737
  405. package/server/system/logs/bb +0 -446
  406. package/server/utils/files/accounting-io.ts +0 -294
  407. package/server/workspace/feeds/engine.ts +0 -143
  408. package/server/workspace/feeds/fetch/httpClient.ts +0 -127
  409. package/server/workspace/feeds/fetch/rssParser.ts +0 -117
  410. package/server/workspace/feeds/index.ts +0 -8
  411. package/server/workspace/feeds/ingestTypes.ts +0 -62
  412. package/server/workspace/feeds/pathResolver.ts +0 -74
  413. package/server/workspace/feeds/paths.ts +0 -30
  414. package/server/workspace/feeds/projectItem.ts +0 -92
  415. package/server/workspace/feeds/registry.ts +0 -43
  416. package/server/workspace/feeds/retrievers/httpJson.ts +0 -19
  417. package/server/workspace/feeds/retrievers/index.ts +0 -27
  418. package/server/workspace/feeds/retrievers/registerAll.ts +0 -5
  419. package/server/workspace/feeds/retrievers/rss.ts +0 -24
  420. package/server/workspace/feeds/state.ts +0 -55
  421. package/src/composables/useAccountingChannel.ts +0 -58
  422. package/src/lib/wiki-page/graph.ts +0 -108
  423. package/src/lib/wiki-page/index-parse.ts +0 -221
  424. package/src/lib/wiki-page/link.ts +0 -62
  425. package/src/lib/wiki-page/lint.ts +0 -105
  426. package/src/lib/wiki-page/paths.ts +0 -35
  427. package/src/lib/wiki-page/slug.ts +0 -54
  428. package/src/plugins/accounting/Preview.vue +0 -103
  429. package/src/plugins/accounting/View.vue +0 -633
  430. package/src/plugins/accounting/actions.ts +0 -34
  431. package/src/plugins/accounting/api.ts +0 -301
  432. package/src/plugins/accounting/components/AccountEditor.vue +0 -250
  433. package/src/plugins/accounting/components/AccountRow.vue +0 -50
  434. package/src/plugins/accounting/components/AccountsList.vue +0 -102
  435. package/src/plugins/accounting/components/AccountsModal.vue +0 -301
  436. package/src/plugins/accounting/components/BalanceSheet.vue +0 -186
  437. package/src/plugins/accounting/components/BookSettings.vue +0 -284
  438. package/src/plugins/accounting/components/BookSwitcher.vue +0 -78
  439. package/src/plugins/accounting/components/DateRangePicker.vue +0 -140
  440. package/src/plugins/accounting/components/JournalEntryForm.vue +0 -505
  441. package/src/plugins/accounting/components/JournalList.vue +0 -554
  442. package/src/plugins/accounting/components/Ledger.vue +0 -206
  443. package/src/plugins/accounting/components/NewBookForm.vue +0 -211
  444. package/src/plugins/accounting/components/OpeningBalancesForm.vue +0 -272
  445. package/src/plugins/accounting/components/ProfitLoss.vue +0 -160
  446. package/src/plugins/accounting/components/accountDraft.ts +0 -13
  447. package/src/plugins/accounting/components/accountNumbering.ts +0 -103
  448. package/src/plugins/accounting/components/accountValidation.ts +0 -75
  449. package/src/plugins/accounting/components/useLatestRequest.ts +0 -44
  450. package/src/plugins/accounting/countries.ts +0 -158
  451. package/src/plugins/accounting/currencies.ts +0 -77
  452. package/src/plugins/accounting/dates.ts +0 -51
  453. package/src/plugins/accounting/fiscalYear.ts +0 -136
  454. package/src/plugins/accounting/timeSeriesEnums.ts +0 -16
  455. package/src/plugins/wiki/route.ts +0 -137
  456. /package/client/assets/{_plugin-vue_export-helper-B67ILkmu.js → _plugin-vue_export-helper-BDNMzG2s.js} +0 -0
  457. /package/client/assets/{purify.es-B27wDFIb-51iYcXuK.js → purify.es-B27wDFIb-Bu4Grnl0.js} +0 -0
  458. /package/client/assets/{typeof-DBp4T-Ny-z2wCIsir.js → typeof-DBp4T-Ny-B5XbjTb1.js} +0 -0
package/src/lang/zh.ts CHANGED
@@ -7,6 +7,8 @@
7
7
 
8
8
  const zhMessages = {
9
9
  common: {
10
+ downloadZip: "ZIP",
11
+ downloadFailed: "下载失败",
10
12
  save: "保存",
11
13
  cancel: "取消",
12
14
  loading: "加载中...",
@@ -57,6 +59,7 @@ const zhMessages = {
57
59
  all: "全部",
58
60
  unread: "未读",
59
61
  bookmarked: "已收藏",
62
+ longRunning: "长期 (24h+)",
60
63
  human: "人工",
61
64
  scheduler: "调度器",
62
65
  skill: "技能",
@@ -119,6 +122,21 @@ const zhMessages = {
119
122
  hideDetails: "隐藏详情",
120
123
  retry: "重试",
121
124
  },
125
+ remoteHost: {
126
+ title: "远程主机",
127
+ online: "远程主机在线",
128
+ offline: "远程主机离线",
129
+ uid: "uid {uid}",
130
+ signIn: "使用 Google 登录",
131
+ connecting: "连接中…",
132
+ disconnect: "断开连接",
133
+ disconnecting: "断开中…",
134
+ noToken: "Google 登录未返回 idToken",
135
+ connectFailed: "连接失败",
136
+ disconnectFailed: "断开连接失败",
137
+ signInFailed: "Google 登录失败",
138
+ statusFailed: "加载状态失败",
139
+ },
122
140
  sidebarHeader: {
123
141
  home: "前往最新对话",
124
142
  toolCallHistory: "工具调用历史",
@@ -326,11 +344,25 @@ const zhMessages = {
326
344
  errAlreadyExists: "已存在",
327
345
  errLabelConflict: '标签 "{label}" 已存在',
328
346
  },
347
+ dashboard: {
348
+ empty: "暂无收藏的集合。",
349
+ emptyHint: "将集合固定(★)后会显示在这里。",
350
+ viewTable: "表格",
351
+ viewCalendar: "日历",
352
+ viewKanban: "看板",
353
+ viewPickerLabel: "选择视图",
354
+ openFull: "双击打开完整视图",
355
+ dragHint: "拖动以重新排序",
356
+ resizeHint: "拖动以调整高度",
357
+ },
329
358
  pluginLauncher: {
359
+ chat: { label: "聊天" },
360
+ dashboard: { label: "仪表板" },
330
361
  automations: { label: "自动化" },
331
362
  wiki: { label: "百科" },
332
363
  collections: { label: "集合" },
333
364
  feeds: { label: "订阅源" },
365
+ accounting: { label: "会计" },
334
366
  files: { label: "文件" },
335
367
  },
336
368
  shortcuts: {
@@ -346,6 +378,9 @@ const zhMessages = {
346
378
  closeFile: "关闭文件",
347
379
  },
348
380
  fileContentRenderer: {
381
+ download: "ZIP",
382
+ downloadZip: "下载为自包含 zip(含资源)",
383
+ downloadError: "下载失败",
349
384
  selectFile: "请选择一个文件",
350
385
  htmlPreview: "HTML 预览",
351
386
  pdfPreview: "PDF 预览",
@@ -636,221 +671,6 @@ const zhMessages = {
636
671
  stylePromptWithPath: "将 `{path}` 处的图像转换为 {style} 风格的图像。",
637
672
  stylePromptNoPath: "将我在画布上的绘图转换为 {style} 风格的图像。",
638
673
  },
639
- pluginAccounting: {
640
- title: "会计",
641
- noBook: '尚无账簿 — 点击上方 "+ 新建账簿" 创建第一个。',
642
- common: {
643
- cancel: "取消",
644
- loading: "加载中…",
645
- error: "错误: {error}",
646
- empty: "尚无条目。",
647
- },
648
- tabs: {
649
- journal: "日记账",
650
- newEntry: "新建分录",
651
- opening: "期初余额",
652
- accounts: "科目",
653
- ledger: "明细账",
654
- balanceSheet: "资产负债表",
655
- profitLoss: "损益",
656
- settings: "设置",
657
- },
658
- bookSwitcher: {
659
- label: "账簿",
660
- newBook: "新建账簿…",
661
- create: "创建",
662
- nameLabel: "名称",
663
- currencyLabel: "货币",
664
- countryLabel: "国家/地区",
665
- countryPlaceholder: "选择国家/地区…",
666
- countryHint: "国家/地区决定税务管辖,助手可据此提供本地化建议(日本T号、欧盟VAT ID等)。",
667
- fiscalYearEndLabel: "财年结束日",
668
- fiscalYearEndQ1: "3月31日 (Q1)",
669
- fiscalYearEndQ2: "6月30日 (Q2)",
670
- fiscalYearEndQ3: "9月30日 (Q3)",
671
- fiscalYearEndQ4: "12月31日 (Q4)",
672
- fiscalYearEndHint: "决定本账簿日期范围快捷方式所使用的财年边界。默认 12月31日(Q4 — 自然年)。",
673
- placeholder: "选择账簿…",
674
- firstRunHint: "请为第一本账簿选择名称、货币、国家/地区与财年结束日。货币按账簿固定,登账后再更改会比较困难。",
675
- },
676
- deletedNotice: {
677
- title: "“{bookName}” 已删除。",
678
- body: "请从上方下拉菜单选择其他账簿,或新建一本。",
679
- },
680
- journalList: {
681
- fromLabel: "起始",
682
- toLabel: "结束",
683
- accountLabel: "科目",
684
- allAccounts: "所有科目",
685
- void: "冲销",
686
- edit: "编辑",
687
- voidConfirm: "冲销此分录?原始分录保留在日记账中,会追加一对反向分录。",
688
- voidReason: "原因(可选):",
689
- columns: {
690
- date: "日期",
691
- kind: "类型",
692
- memo: "备注",
693
- lines: "明细",
694
- },
695
- kind: {
696
- normal: "—",
697
- opening: "期初",
698
- void: "反向",
699
- voidMarker: "冲销标记",
700
- },
701
- },
702
- entryForm: {
703
- title: "新建分录",
704
- editTitle: "编辑分录",
705
- editBanner: "提交后,原分录将被冲销并以此内容替换。",
706
- dateLabel: "日期",
707
- memoLabel: "备注",
708
- accountLabel: "科目",
709
- debitLabel: "借方",
710
- creditLabel: "贷方",
711
- taxRegistrationIdLabel: "税务登记号",
712
- taxRegistrationIdPlaceholder: "T-number / VAT ID / GSTIN…",
713
- taxRegistrationIdMissingWarning: "必填",
714
- addLine: "添加行",
715
- removeLine: "删除",
716
- submit: "登账",
717
- submitting: "登账中…",
718
- update: "更新",
719
- updating: "更新中…",
720
- cancelEdit: "取消",
721
- success: "已登账。",
722
- editSuccess: "分录已更新。",
723
- editVoidReason: "已编辑",
724
- imbalance: "差额: {amount}",
725
- balanced: "已平衡 ✓",
726
- },
727
- openingForm: {
728
- title: "期初余额",
729
- asOfLabel: "基准日",
730
- explainer: "仅允许 B/S 科目(资产 / 负债 / 权益)。Σ借方=Σ贷方,差额会落入 Retained Earnings。",
731
- emptyHint: "可以全部留空保存——期初余额稍后再更新。账簿只需先存在一条期初记录,其他标签页才会解锁。",
732
- explainer2: "仅 B/S 科目。",
733
- submit: "保存期初余额",
734
- replaceWarning: "保存会替换现有期初余额(旧的会在日记账中冲销)。",
735
- none: "尚未设置期初余额。",
736
- setBy: "{date} 已设置",
737
- success: "期初余额已保存。",
738
- },
739
- ledger: {
740
- selectAccount: "选择科目",
741
- closingBalance: "期末余额",
742
- columns: {
743
- date: "日期",
744
- memo: "备注",
745
- debit: "借方",
746
- credit: "贷方",
747
- balance: "余额",
748
- taxRegistrationId: "税务登记号",
749
- },
750
- },
751
- dateRange: {
752
- shortcutLabel: "范围",
753
- currentQuarter: "本季度",
754
- previousQuarter: "上季度",
755
- currentYear: "本年度",
756
- previousYear: "上年度",
757
- lifetime: "自开账以来",
758
- all: "全部",
759
- fromLabel: "起始",
760
- toLabel: "结束",
761
- },
762
- balanceSheet: {
763
- asOfLabel: "期间",
764
- sections: {
765
- asset: "资产",
766
- liability: "负债",
767
- equity: "权益",
768
- },
769
- total: "合计",
770
- imbalance: "差额: {amount}",
771
- currentEarnings: "当期净损益",
772
- shortcutLabel: "快捷方式",
773
- thisMonth: "本月",
774
- lastMonth: "上月",
775
- lastQuarter: "上季度",
776
- lastYear: "上年",
777
- },
778
- profitLoss: {
779
- fromLabel: "起始",
780
- toLabel: "结束",
781
- income: "收入",
782
- expense: "支出",
783
- netIncome: "净利润:",
784
- },
785
- accounts: {
786
- listEmpty: "此分类下暂无科目。",
787
- openLedgerAria: "打开 {code} {name} 的明细账",
788
- manageButton: "管理科目",
789
- modalTitle: "管理科目",
790
- addAccount: "添加科目",
791
- sectionTitle: {
792
- asset: "资产",
793
- liability: "负债",
794
- equity: "权益",
795
- income: "收入",
796
- expense: "费用",
797
- },
798
- columnCode: "代码",
799
- columnName: "名称",
800
- columnType: "类型",
801
- columnNote: "备注",
802
- typeOption: {
803
- asset: "资产",
804
- liability: "负债",
805
- equity: "权益",
806
- income: "收入",
807
- expense: "费用",
808
- },
809
- edit: "编辑",
810
- save: "保存",
811
- cancel: "取消",
812
- saving: "保存中…",
813
- addToCategory: "添加{type}",
814
- deactivate: "停用",
815
- reactivate: "启用",
816
- deactivateConfirm: "在分录/明细账下拉框中隐藏“{name}”?现有日记账分录不受影响。",
817
- errorEmptyCode: "代码不能为空。",
818
- errorReservedCode: "以 “_” 开头的代码保留给系统行使用。",
819
- errorInvalidCodeFormat: "科目代码必须为 4 位数字。",
820
- errorCodeTypeMismatch: "代码首位必须与科目类型匹配:1xxx 资产,2xxx 负债,3xxx 权益,4xxx 收入,5xxx 费用。",
821
- errorEmptyName: "名称不能为空。",
822
- errorDuplicateCode: "此代码的科目已存在。",
823
- errorDuplicateName: "此名称的科目已存在。",
824
- success: "科目已保存。",
825
- codeReadOnlyHint: "科目创建后代码不能更改。",
826
- noteOptional: "(可选)",
827
- },
828
- settings: {
829
- bookInfo: "账簿信息",
830
- bookInfoExplain: "修改国家/地区可更新税务管辖相关建议。开始登账后货币不可更改。",
831
- countryUnset: "(未设置)",
832
- fiscalYearEndExplain: "仅影响今后日期范围快捷方式的解析方式;现有日记账分录不会移动。",
833
- saveChanges: "保存更改",
834
- updateOk: "账簿已更新。",
835
- rebuild: "重建快照",
836
- rebuildExplain: "删除全部月度快照缓存并从日记账重新计算。手动编辑日记账后可用。",
837
- rebuildOk: "已重建 {count} 期。",
838
- advanced: "高级设置…",
839
- deleteBook: "删除账簿",
840
- deleteBookExplain: "永久删除该账簿目录。无法撤销。",
841
- deleteBookConfirm: '请输入 "{bookName}" 以确认:',
842
- deleteBookButton: "彻底删除",
843
- },
844
- preview: {
845
- entry: "已记账 {date} 的分录",
846
- pl: "P&L {from} → {to}: 净额 {net}",
847
- bs: "{date} 资产负债表 · 资产 {assets}",
848
- bookCreated: '已创建账簿 "{name}" ({id})',
849
- },
850
- previewSummary: "会计 · {bookId}",
851
- previewError: "会计: {error}",
852
- previewGeneric: "会计结果",
853
- },
854
674
  pluginWiki: {
855
675
  backToIndex: "返回目录",
856
676
  pdf: "PDF",
@@ -1091,6 +911,10 @@ const zhMessages = {
1091
911
  marpSplitExit: "关闭源代码编辑器",
1092
912
  marpSplitEditorLabel: "源代码",
1093
913
  },
914
+ markdownMermaid: {
915
+ loadFailed: "⚠ Mermaid 加载失败: {error}",
916
+ renderFailed: "⚠ Mermaid 渲染失败: {error}",
917
+ },
1094
918
  pluginTextResponse: {
1095
919
  pdf: "PDF",
1096
920
  pdfFailed: "⚠ PDF 失败",
package/src/main.ts CHANGED
@@ -2,6 +2,9 @@ import { createApp } from "vue";
2
2
  // Wire @mulmoclaude/collection-plugin/vue to this host's collection API +
3
3
  // asset-URL scheme before any collection View mounts (side effect).
4
4
  import "./composables/collections/uiHost";
5
+ // Wire @mulmoclaude/accounting-plugin/vue to this host's apiCall +
6
+ // pub/sub + stylesheet before any accounting View mounts (side effect).
7
+ import "./composables/accountingHost";
5
8
  import App from "./App.vue";
6
9
  import router from "./router/index";
7
10
  import { installGuards } from "./router/guards";
@@ -1,9 +1,12 @@
1
1
  import type { ToolDefinition } from "gui-chat-protocol";
2
2
  import { META } from "./meta";
3
- import { ACCOUNTING_ACTIONS } from "./actions";
4
- import { SUPPORTED_COUNTRY_CODES } from "./countries";
5
- import { FISCAL_YEAR_ENDS } from "./fiscalYear";
6
- import { TIME_SERIES_GRANULARITIES, TIME_SERIES_METRICS } from "./timeSeriesEnums";
3
+ import {
4
+ ACCOUNTING_ACTIONS,
5
+ SUPPORTED_COUNTRY_CODES,
6
+ FISCAL_YEAR_END_MONTHS,
7
+ TIME_SERIES_GRANULARITIES,
8
+ TIME_SERIES_METRICS,
9
+ } from "@mulmoclaude/accounting-plugin/shared";
7
10
 
8
11
  // MCP tool definition for the accounting plugin.
9
12
  //
@@ -56,10 +59,11 @@ const toolDefinition: ToolDefinition = {
56
59
  "For 'createBook' / 'updateBook': ISO 3166-1 alpha-2 country code identifying the tax jurisdiction. Drives country-aware advice — e.g. when set to 'JP', strongly suggest the supplier's T-number (適格請求書発行事業者登録番号) on tax-related lines under インボイス制度. Only the codes listed in the enum are accepted; pass an empty string to 'updateBook' to clear the field.",
57
60
  },
58
61
  fiscalYearEnd: {
59
- type: "string",
60
- enum: [...FISCAL_YEAR_ENDS],
62
+ type: "integer",
63
+ minimum: FISCAL_YEAR_END_MONTHS[0],
64
+ maximum: FISCAL_YEAR_END_MONTHS[FISCAL_YEAR_END_MONTHS.length - 1],
61
65
  description:
62
- "For 'createBook' / 'updateBook': which calendar-quarter end is this book's fiscal year endQ1 = March 31, Q2 = June 30, Q3 = September 30, Q4 = December 31 (calendar year, the default). Drives the date-range shortcuts in the UI ('current quarter', 'current year', etc.). Pure metadata: changing it does not move existing entries.",
66
+ "For 'createBook' / 'updateBook': the calendar month (1-12) on whose LAST DAY this book's fiscal year closese.g. 3 = March 31, 8 = August 31, 12 = December 31 (calendar year, the default). Any month is allowed. Drives the date-range shortcuts in the UI ('current quarter', 'current year', etc.). Pure metadata: changing it does not move existing entries.",
63
67
  },
64
68
  initialTab: { type: "string", description: "For 'openBook': initial tab to show (e.g. 'journal', 'opening', 'balanceSheet')." },
65
69
  confirm: { type: "boolean", description: "For 'deleteBook': must be true to actually delete (guard against accidental deletion)." },
@@ -167,7 +171,7 @@ const toolDefinition: ToolDefinition = {
167
171
  type: "string",
168
172
  enum: [...TIME_SERIES_GRANULARITIES],
169
173
  description:
170
- "For 'getTimeSeries': bucket size. 'month' uses calendar months (label format YYYY-MM). 'quarter' and 'year' honour the book's fiscalYearEnd — for a Q4 book they coincide with calendar quarters / years; Q1/Q2/Q3 books shift accordingly. Quarter labels are 'FY{endYear}-Q{1..4}', year labels are 'FY{endYear}'; the FY is named by its END calendar year (e.g. an FY running Apr 2025 – Mar 2026 is FY2026).",
174
+ "For 'getTimeSeries': bucket size. 'month' uses calendar months (label format YYYY-MM). 'quarter' and 'year' honour the book's fiscalYearEnd — for a December year-end book (12) they coincide with calendar quarters / years; any other closing month shifts them accordingly. Quarter labels are 'FY{endYear}-Q{1..4}', year labels are 'FY{endYear}'; the FY is named by its END calendar year (e.g. an FY running Apr 2025 – Mar 2026 is FY2026).",
171
175
  },
172
176
  // opening
173
177
  asOfDate: {
@@ -1,7 +1,10 @@
1
1
  import type { PluginRegistration, ToolPlugin } from "../../tools/types";
2
2
  import type { ToolResult } from "gui-chat-protocol";
3
- import View from "./View.vue";
4
- import Preview from "./Preview.vue";
3
+ // The View + Preview now live in @mulmoclaude/accounting-plugin/vue (shared
4
+ // with MulmoTerminal). The built-in host still wraps them in its own plugin
5
+ // scope. The host injects the network + pub/sub seams via
6
+ // `configureAccountingHost(...)` in src/main.ts before any View mounts.
7
+ import { AccountingView, AccountingPreview } from "@mulmoclaude/accounting-plugin/vue";
5
8
  import toolDefinition from "./definition";
6
9
  import { META } from "./meta";
7
10
  import { wrapWithScope } from "../scope";
@@ -37,8 +40,8 @@ const accountingPlugin: ToolPlugin<AccountingActionData> = {
37
40
 
38
41
  isEnabled: () => true,
39
42
  generatingMessage: "Working on the books...",
40
- viewComponent: wrapWithScope("accounting", View),
41
- previewComponent: wrapWithScope("accounting", Preview),
43
+ viewComponent: wrapWithScope("accounting", AccountingView),
44
+ previewComponent: wrapWithScope("accounting", AccountingPreview),
42
45
  };
43
46
 
44
47
  export default accountingPlugin;
@@ -1,22 +1,26 @@
1
1
  // Central-registry-facing metadata that the accounting plugin owns.
2
2
  // Imported by host aggregators (`src/config/*` and
3
3
  // `server/workspace/paths.ts`) which iterate over every plugin's
4
- // META and merge automatically. Host code holds zero
5
- // plugin-specific literals when a constant is "produced by the
6
- // plugin", the plugin is the source of truth.
4
+ // META and merge automatically, plus the codegen barrels
5
+ // (`src/plugins/_generated/*`). Host code holds zero plugin-specific
6
+ // literals when a constant is "produced by the plugin", the plugin
7
+ // is the source of truth.
7
8
  //
8
- // Browser-safe: no Vue imports, no server-only imports. Both server
9
- // and frontend code can import this file.
9
+ // Stays host-side (not in @mulmoclaude/accounting-plugin) because the
10
+ // plugin-barrel codegen discovers every built-in plugin by scanning
11
+ // `src/plugins/<name>/meta.ts`. The reusable per-book channel/event
12
+ // contract moved to `@mulmoclaude/accounting-plugin/shared` (the
13
+ // backend needs it); this file keeps only the host-wiring META.
14
+ //
15
+ // Browser-safe: no Vue imports, no server-only imports.
10
16
 
11
17
  import { definePluginMeta } from "../meta-types";
18
+ import { ACCOUNTING_DIRS } from "@mulmoclaude/accounting-plugin/shared";
12
19
 
13
20
  /** Single object the host aggregators iterate over. `definePluginMeta`
14
21
  * type-checks the shape (typo / missing field surfaces at compile
15
22
  * time) AND preserves nested literal types via TS 5.0+'s `const`
16
- * type parameter. Helper functions / types specific to this plugin
17
- * (e.g. `bookChannel(bookId)`, `BookChannelPayload`) live below as
18
- * separate named exports — the META object only carries the static
19
- * values that aggregate generically. */
23
+ * type parameter. */
20
24
  export const META = definePluginMeta({
21
25
  toolName: "manageAccounting",
22
26
  apiNamespace: "accounting",
@@ -28,64 +32,23 @@ export const META = definePluginMeta({
28
32
  // Flat keys merged into the central `WORKSPACE_DIRS`. Created
29
33
  // lazily on first `createBook` so default workspaces don't get a
30
34
  // stub `accounting/` they never use.
35
+ // Sourced from the package's shared `ACCOUNTING_DIRS` (the single
36
+ // source of truth the backend io layer also reads) so the on-disk
37
+ // layout can't drift between this aggregator merge and the backend.
31
38
  workspaceDirs: {
32
- accounting: "data/accounting",
39
+ accounting: ACCOUNTING_DIRS.accounting,
33
40
  // `accounting/books/<bookId>/{accounts.json, journal/YYYY-MM.jsonl,
34
41
  // snapshots/YYYY-MM.json}` — multi-book layout (#1078).
35
- accountingBooks: "data/accounting/books",
42
+ accountingBooks: ACCOUNTING_DIRS.accountingBooks,
36
43
  },
37
44
  // Static pubsub channel names merged into the central
38
45
  // `PUBSUB_CHANNELS`. Per-book data changes ride
39
- // `bookChannel(bookId)` (helper below); book-list-level events
40
- // (a new book was created, an existing one was deleted) ride
41
- // `accountingBooks` so a `JournalList.vue` viewing book A doesn't
42
- // repaint when the user creates book B from another window.
46
+ // `bookChannel(bookId)` (helper in the package's shared surface);
47
+ // book-list-level events (a new book was created, an existing one
48
+ // was deleted) ride `accountingBooks` so a `JournalList.vue`
49
+ // viewing book A doesn't repaint when the user creates book B from
50
+ // another window.
43
51
  staticChannels: {
44
52
  accountingBooks: "accounting:books",
45
53
  },
46
54
  });
47
-
48
- /** Channel factory for per-book event streams. Subscribers:
49
- * `useAccountingChannel(bookId)`. Publisher:
50
- * `server/accounting/eventPublisher.ts`. */
51
- export function bookChannel(bookId: string): string {
52
- return `accounting:${bookId}`;
53
- }
54
-
55
- /** Event kinds that ride `bookChannel(bookId)`. Single source of
56
- * truth for both publishers (server/accounting) and subscribers
57
- * (the View) — anyone branching on event kind imports from here
58
- * and the type system catches drift on either side.
59
- *
60
- * - `journal` — addEntry / voidEntry hit the books at `period`.
61
- * Refetch the journal list and (if the View is
62
- * showing balances at or after `period`) the
63
- * relevant report.
64
- * - `opening` — setOpeningBalances. Affects every period from
65
- * the opening date forward; refetch everything.
66
- * - `accounts` — chart-of-accounts mutation that may affect
67
- * aggregation (account type changed). Refetch
68
- * accounts and the active report.
69
- * - `snapshotsRebuilding` / `snapshotsReady` — purely informational;
70
- * the View can show a "calculating" spinner
71
- * during rebuild, but the lazy-rebuild safety
72
- * net means a refetch always returns the right
73
- * answer regardless. */
74
- export const BOOK_EVENT_KINDS = {
75
- journal: "journal",
76
- opening: "opening",
77
- accounts: "accounts",
78
- snapshotsRebuilding: "snapshots-rebuilding",
79
- snapshotsReady: "snapshots-ready",
80
- } as const;
81
-
82
- export type BookEventKind = (typeof BOOK_EVENT_KINDS)[keyof typeof BOOK_EVENT_KINDS];
83
-
84
- /** Payload published on `bookChannel(bookId)`. */
85
- export interface BookChannelPayload {
86
- kind: BookEventKind;
87
- /** YYYY-MM. Present for `journal` (entry month) and the snapshot
88
- * events (the earliest invalidated month). Absent for `opening`
89
- * (which invalidates everything) and `accounts`. */
90
- period?: string;
91
- }
@@ -289,7 +289,7 @@
289
289
  <div v-if="catalogDetailLoading" class="text-sm text-gray-400 italic">{{ t("pluginManageSkills.loading") }}</div>
290
290
  <div v-else-if="catalogError" class="text-sm text-red-600">{{ catalogError }}</div>
291
291
  <!-- eslint-disable vue/no-v-html -- markdown sanitized via sanitizeMarkdownHtml; same trust chain as the active-skill body below -->
292
- <div v-else-if="catalogDetail" class="markdown-content text-gray-700" v-html="catalogRenderedBody"></div>
292
+ <div v-else-if="catalogDetail" ref="catalogMarkdownRef" class="markdown-content text-gray-700" v-html="catalogRenderedBody"></div>
293
293
  <!-- eslint-enable vue/no-v-html -->
294
294
  </div>
295
295
 
@@ -378,6 +378,7 @@
378
378
  <!-- eslint-disable vue/no-v-html -- sanitized via DOMPurify; multi-line element so disable/enable pair (CLAUDE.md UI rule) instead of -next-line -->
379
379
  <div
380
380
  v-else-if="detail && renderedBody"
381
+ ref="skillMarkdownRef"
381
382
  class="markdown-content text-gray-700"
382
383
  data-testid="skill-body-rendered"
383
384
  @click="handleExternalLinkClick"
@@ -488,6 +489,7 @@ import type { ManageSkillsData, SkillSummary } from "./index";
488
489
  import { apiGet, apiPost, apiPut, apiDelete } from "../../utils/api";
489
490
  import { handleExternalLinkClick } from "../../utils/dom/externalLink";
490
491
  import { sanitizeMarkdownHtml } from "../../utils/markdown/sanitize";
492
+ import { useMermaidRenderer } from "../../utils/markdown/useMermaid";
491
493
  import { pluginEndpoints } from "../api";
492
494
  import { buildRouteUrl } from "../meta-types";
493
495
  import type { SkillsEndpoints } from "./definition";
@@ -565,6 +567,9 @@ const renderedBody = computed(() => {
565
567
  return sanitizeMarkdownHtml(marked(body) as string);
566
568
  });
567
569
 
570
+ const skillMarkdownRef = ref<HTMLElement | null>(null);
571
+ useMermaidRenderer(skillMarkdownRef, renderedBody);
572
+
568
573
  // Edit/Delete follows the backend writer contract (writer.ts rejects
569
574
  // only source === "user"), NOT the mc- name heuristic. Under #1335
570
575
  // PR-A the launcher syncs presets to data/skills/catalog/preset/ and
@@ -667,6 +672,9 @@ const catalogRenderedBody = computed(() => {
667
672
  return sanitizeMarkdownHtml(marked(body) as string);
668
673
  });
669
674
 
675
+ const catalogMarkdownRef = ref<HTMLElement | null>(null);
676
+ useMermaidRenderer(catalogMarkdownRef, catalogRenderedBody);
677
+
670
678
  // External catalog entries grouped under their repo, in the repo
671
679
  // order returned by `/external/repos`. Repos with zero discoverable
672
680
  // entries still render (header + empty state) so an install that
@@ -193,7 +193,7 @@ h2 {
193
193
  align-items: baseline;
194
194
  }
195
195
  .path {
196
- font-family: monospace;
196
+ font-family: Consolas, "MS Gothic", "BIZ UDGothic", monospace;
197
197
  font-size: 0.75rem;
198
198
  color: #374151;
199
199
  overflow: hidden;
@@ -216,7 +216,7 @@ h2 {
216
216
  color: #4b5563;
217
217
  }
218
218
  .coords {
219
- font-family: monospace;
219
+ font-family: Consolas, "MS Gothic", "BIZ UDGothic", monospace;
220
220
  }
221
221
  .altitude {
222
222
  color: #9ca3af;
@@ -1,9 +1,9 @@
1
1
  import { META } from "./meta";
2
2
  import type { ResolvedRoute } from "../meta-types";
3
- import { TOOL_DEFINITION } from "@mulmoclaude/collection-plugin";
3
+ import { TOOL_DEFINITION } from "@mulmoclaude/core/collection";
4
4
 
5
5
  // presentCollection's tool schema + executor now live in the shared
6
- // @mulmoclaude/collection-plugin package (single source of truth, also consumed
6
+ // @mulmoclaude/core/collection package (single source of truth, also consumed
7
7
  // by MulmoTerminal). This built-in is a thin host adapter: it keeps MulmoClaude's
8
8
  // host-specific routing META + endpoint types while sourcing the definition from
9
9
  // the package. The plugin codegen scans this file's default ToolDefinition export.
@@ -1,6 +1,6 @@
1
1
  // presentCollection's tool definition + executor now live in the shared
2
- // @mulmoclaude/collection-plugin package (single source of truth, also consumed
2
+ // @mulmoclaude/core/collection package (single source of truth, also consumed
3
3
  // by MulmoTerminal). Re-exported here so existing importers — the server
4
4
  // dispatch route (server/api/routes/plugins.ts) and the plugin index — keep
5
5
  // working unchanged.
6
- export { executePresentCollection, TOOL_NAME, TOOL_DEFINITION } from "@mulmoclaude/collection-plugin";
6
+ export { executePresentCollection, TOOL_NAME, TOOL_DEFINITION } from "@mulmoclaude/core/collection";
@@ -1,4 +1,4 @@
1
1
  // presentCollection's render/arg types now live in the shared
2
- // @mulmoclaude/collection-plugin package. Re-exported here so existing relative
2
+ // @mulmoclaude/core/collection package. Re-exported here so existing relative
3
3
  // imports (View.vue, Preview.vue, index.ts) keep working unchanged.
4
- export type { PresentCollectionData, PresentCollectionArgs } from "@mulmoclaude/collection-plugin";
4
+ export type { PresentCollectionData, PresentCollectionArgs } from "@mulmoclaude/core/collection";
@@ -7,7 +7,7 @@ import { TOOL_DEFINITION } from "@mulmoclaude/html-plugin";
7
7
  // consumable by MulmoTerminal). This built-in is a thin host adapter: it keeps
8
8
  // MulmoClaude's host-specific routing META and scoped-runtime wrapping while
9
9
  // sourcing the schema/logic from the package. The Vue View stays host-side until
10
- // phase 2 (see plans/feat-presenthtml-mulmoterminal.md).
10
+ // phase 2 (see plans/done/feat-presenthtml-mulmoterminal.md).
11
11
  export const TOOL_NAME = META.toolName;
12
12
 
13
13
  /** Resolved-URL view of the html plugin's routes (create / update). Plugin code
@@ -1718,7 +1718,7 @@ async function downloadPdf() {
1718
1718
  padding: 0.5rem;
1719
1719
  background: #f5f5f5;
1720
1720
  border-top: 1px solid #e0e0e0;
1721
- font-family: monospace;
1721
+ font-family: Consolas, "MS Gothic", "BIZ UDGothic", monospace;
1722
1722
  font-size: 0.85rem;
1723
1723
  }
1724
1724
 
@@ -1748,7 +1748,7 @@ async function downloadPdf() {
1748
1748
  border: 1px solid #ccc;
1749
1749
  border-radius: 4px;
1750
1750
  color: #333;
1751
- font-family: "Courier New", monospace;
1751
+ font-family: "Courier New", "MS Gothic", "BIZ UDGothic", monospace;
1752
1752
  font-size: 0.9rem;
1753
1753
  resize: vertical;
1754
1754
  margin-bottom: 0.5rem;
@@ -50,7 +50,7 @@ export function parseSSEEventLine(line: string): SSEEvent | null {
50
50
  * characters must be rendered first so they can be referenced by
51
51
  * any character-using beat.
52
52
  */
53
- export function shouldAutoRenderBeat(beat: { image?: { type?: string } | undefined }, hasCharacters: boolean, autoRenderTypes: readonly string[]): boolean {
53
+ export function shouldAutoRenderBeat(beat: { image?: { type?: string } }, hasCharacters: boolean, autoRenderTypes: readonly string[]): boolean {
54
54
  if (hasCharacters) return false;
55
55
  const type = beat.image?.type;
56
56
  if (typeof type !== "string") return false;
@@ -341,7 +341,7 @@ function triggerDownload(blob: Blob, filename: string) {
341
341
  padding: 0.5rem;
342
342
  background: #f5f5f5;
343
343
  border-top: 1px solid #e0e0e0;
344
- font-family: monospace;
344
+ font-family: Consolas, "MS Gothic", "BIZ UDGothic", monospace;
345
345
  font-size: 0.85rem;
346
346
  flex-shrink: 0;
347
347
  }
@@ -372,7 +372,7 @@ function triggerDownload(blob: Blob, filename: string) {
372
372
  border: 1px solid #ccc;
373
373
  border-radius: 4px;
374
374
  color: #333;
375
- font-family: "Courier New", monospace;
375
+ font-family: "Courier New", "MS Gothic", "BIZ UDGothic", monospace;
376
376
  font-size: 0.9rem;
377
377
  resize: vertical;
378
378
  margin-bottom: 0.5rem;
@@ -114,8 +114,7 @@
114
114
  <pre
115
115
  class="px-2 py-1.5 rounded bg-gray-50 border border-gray-200 text-gray-700 whitespace-pre-wrap break-words font-mono text-[11px] leading-relaxed"
116
116
  :data-testid="`scheduler-task-prompt-${task.id}`"
117
- >{{ task.prompt }}</pre
118
- >
117
+ >{{ task.prompt }}</pre>
119
118
  </div>
120
119
  </div>
121
120
  </details>