@musnows/scriverse 0.3.10 → 0.4.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 (560) hide show
  1. package/README.en.md +2 -0
  2. package/README.md +2 -0
  3. package/dist/ai.js +292 -19
  4. package/dist/ai.js.map +1 -1
  5. package/dist/app.js +50 -6
  6. package/dist/app.js.map +1 -1
  7. package/dist/database.js +47 -0
  8. package/dist/database.js.map +1 -1
  9. package/dist/public/app.js +994 -194
  10. package/dist/public/character-markdown.js +12 -0
  11. package/dist/public/index.html +69 -26
  12. package/dist/public/model-config.d.ts +1 -0
  13. package/dist/public/model-config.js +12 -3
  14. package/dist/public/module-layout.d.ts +17 -0
  15. package/dist/public/module-layout.js +28 -0
  16. package/dist/public/page-route.js +1 -1
  17. package/dist/public/styles.css +191 -59
  18. package/dist/public/vendor/vditor/dist/css/content-theme/ant-design.css +210 -0
  19. package/dist/public/vendor/vditor/dist/css/content-theme/dark.css +123 -0
  20. package/dist/public/vendor/vditor/dist/css/content-theme/light.css +101 -0
  21. package/dist/public/vendor/vditor/dist/css/content-theme/wechat.css +94 -0
  22. package/dist/public/vendor/vditor/dist/images/emoji/b3log.png +0 -0
  23. package/dist/public/vendor/vditor/dist/images/emoji/chainbook.png +0 -0
  24. package/dist/public/vendor/vditor/dist/images/emoji/doge.png +0 -0
  25. package/dist/public/vendor/vditor/dist/images/emoji/hacpai.png +0 -0
  26. package/dist/public/vendor/vditor/dist/images/emoji/huaji.gif +0 -0
  27. package/dist/public/vendor/vditor/dist/images/emoji/latke.png +0 -0
  28. package/dist/public/vendor/vditor/dist/images/emoji/liandi.png +0 -0
  29. package/dist/public/vendor/vditor/dist/images/emoji/lute.png +0 -0
  30. package/dist/public/vendor/vditor/dist/images/emoji/octocat.png +0 -0
  31. package/dist/public/vendor/vditor/dist/images/emoji/pipe.png +0 -0
  32. package/dist/public/vendor/vditor/dist/images/emoji/siyuan.png +0 -0
  33. package/dist/public/vendor/vditor/dist/images/emoji/solo.png +0 -0
  34. package/dist/public/vendor/vditor/dist/images/emoji/sym.png +0 -0
  35. package/dist/public/vendor/vditor/dist/images/emoji/trollface.png +0 -0
  36. package/dist/public/vendor/vditor/dist/images/emoji/vditor.png +0 -0
  37. package/dist/public/vendor/vditor/dist/images/emoji/wide.png +0 -0
  38. package/dist/public/vendor/vditor/dist/images/emoji/wulian.png +0 -0
  39. package/dist/public/vendor/vditor/dist/images/img-loading.svg +1 -0
  40. package/dist/public/vendor/vditor/dist/images/logo.png +0 -0
  41. package/dist/public/vendor/vditor/dist/index.css +1823 -0
  42. package/dist/public/vendor/vditor/dist/index.d.ts +82 -0
  43. package/dist/public/vendor/vditor/dist/index.js +15995 -0
  44. package/dist/public/vendor/vditor/dist/index.min.js +1 -0
  45. package/dist/public/vendor/vditor/dist/js/abcjs/abcjs_basic.min.js +3 -0
  46. package/dist/public/vendor/vditor/dist/js/echarts/echarts.min.js +45 -0
  47. package/dist/public/vendor/vditor/dist/js/flowchart.js/flowchart.min.js +8 -0
  48. package/dist/public/vendor/vditor/dist/js/graphviz/full.render.js +90 -0
  49. package/dist/public/vendor/vditor/dist/js/graphviz/viz.js +333 -0
  50. package/dist/public/vendor/vditor/dist/js/highlight.js/LICENSE +29 -0
  51. package/dist/public/vendor/vditor/dist/js/highlight.js/highlight.min.js +3835 -0
  52. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/a11y-dark.min.css +7 -0
  53. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/a11y-light.min.css +7 -0
  54. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/agate.min.css +20 -0
  55. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/an-old-hope.min.css +9 -0
  56. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/androidstudio.min.css +1 -0
  57. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/ant-design.min.css +84 -0
  58. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/arduino-light.min.css +1 -0
  59. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/arta.min.css +1 -0
  60. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/ascetic.min.css +1 -0
  61. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/atom-one-dark-reasonable.min.css +1 -0
  62. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/atom-one-dark.min.css +1 -0
  63. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/atom-one-light.min.css +1 -0
  64. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/3024.min.css +7 -0
  65. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/apathy.min.css +7 -0
  66. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/apprentice.min.css +7 -0
  67. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/ashes.min.css +7 -0
  68. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-cave-light.min.css +7 -0
  69. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-cave.min.css +7 -0
  70. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-dune-light.min.css +7 -0
  71. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-dune.min.css +7 -0
  72. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-estuary-light.min.css +7 -0
  73. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-estuary.min.css +7 -0
  74. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-forest-light.min.css +7 -0
  75. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-forest.min.css +7 -0
  76. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-heath-light.min.css +7 -0
  77. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-heath.min.css +7 -0
  78. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-lakeside-light.min.css +7 -0
  79. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-lakeside.min.css +7 -0
  80. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-plateau-light.min.css +7 -0
  81. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-plateau.min.css +7 -0
  82. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-savanna-light.min.css +7 -0
  83. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-savanna.min.css +7 -0
  84. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-seaside-light.min.css +7 -0
  85. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-seaside.min.css +7 -0
  86. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-sulphurpool-light.min.css +7 -0
  87. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atelier-sulphurpool.min.css +7 -0
  88. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/atlas.min.css +7 -0
  89. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/bespin.min.css +7 -0
  90. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/black-metal-bathory.min.css +7 -0
  91. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/black-metal-burzum.min.css +7 -0
  92. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/black-metal-dark-funeral.min.css +7 -0
  93. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/black-metal-gorgoroth.min.css +7 -0
  94. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/black-metal-immortal.min.css +7 -0
  95. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/black-metal-khold.min.css +7 -0
  96. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/black-metal-marduk.min.css +7 -0
  97. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/black-metal-mayhem.min.css +7 -0
  98. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/black-metal-nile.min.css +7 -0
  99. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/black-metal-venom.min.css +7 -0
  100. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/black-metal.min.css +7 -0
  101. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/brewer.min.css +7 -0
  102. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/bright.min.css +7 -0
  103. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/brogrammer.min.css +7 -0
  104. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/brush-trees-dark.min.css +7 -0
  105. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/brush-trees.min.css +7 -0
  106. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/chalk.min.css +7 -0
  107. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/circus.min.css +7 -0
  108. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/classic-dark.min.css +7 -0
  109. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/classic-light.min.css +7 -0
  110. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/codeschool.min.css +7 -0
  111. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/colors.min.css +7 -0
  112. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/cupcake.min.css +7 -0
  113. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/cupertino.min.css +7 -0
  114. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/danqing.min.css +7 -0
  115. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/darcula.min.css +7 -0
  116. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/dark-violet.min.css +7 -0
  117. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/darkmoss.min.css +7 -0
  118. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/darktooth.min.css +7 -0
  119. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/decaf.min.css +7 -0
  120. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/default-dark.min.css +7 -0
  121. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/default-light.min.css +7 -0
  122. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/dirtysea.min.css +7 -0
  123. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/dracula.min.css +7 -0
  124. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/edge-dark.min.css +7 -0
  125. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/edge-light.min.css +7 -0
  126. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/eighties.min.css +7 -0
  127. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/embers.min.css +7 -0
  128. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/equilibrium-dark.min.css +7 -0
  129. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/equilibrium-gray-dark.min.css +7 -0
  130. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/equilibrium-gray-light.min.css +7 -0
  131. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/equilibrium-light.min.css +7 -0
  132. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/espresso.min.css +7 -0
  133. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/eva-dim.min.css +7 -0
  134. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/eva.min.css +7 -0
  135. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/flat.min.css +7 -0
  136. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/framer.min.css +7 -0
  137. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/fruit-soda.min.css +7 -0
  138. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/gigavolt.min.css +7 -0
  139. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/github.min.css +7 -0
  140. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/google-dark.min.css +7 -0
  141. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/google-light.min.css +7 -0
  142. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/grayscale-dark.min.css +7 -0
  143. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/grayscale-light.min.css +7 -0
  144. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/green-screen.min.css +7 -0
  145. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/gruvbox-dark-hard.min.css +7 -0
  146. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/gruvbox-dark-medium.min.css +7 -0
  147. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/gruvbox-dark-pale.min.css +7 -0
  148. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/gruvbox-dark-soft.min.css +7 -0
  149. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/gruvbox-light-hard.min.css +7 -0
  150. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/gruvbox-light-medium.min.css +7 -0
  151. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/gruvbox-light-soft.min.css +7 -0
  152. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/hardcore.min.css +7 -0
  153. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/harmonic16-dark.min.css +7 -0
  154. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/harmonic16-light.min.css +7 -0
  155. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/heetch-dark.min.css +7 -0
  156. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/heetch-light.min.css +7 -0
  157. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/helios.min.css +7 -0
  158. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/hopscotch.min.css +7 -0
  159. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/horizon-dark.min.css +7 -0
  160. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/horizon-light.min.css +7 -0
  161. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/humanoid-dark.min.css +7 -0
  162. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/humanoid-light.min.css +7 -0
  163. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/ia-dark.min.css +7 -0
  164. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/ia-light.min.css +7 -0
  165. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/icy-dark.min.css +7 -0
  166. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/ir-black.min.css +7 -0
  167. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/isotope.min.css +7 -0
  168. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/kimber.min.css +7 -0
  169. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/london-tube.min.css +7 -0
  170. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/macintosh.min.css +7 -0
  171. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/marrakesh.min.css +7 -0
  172. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/materia.min.css +7 -0
  173. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/material-darker.min.css +7 -0
  174. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/material-lighter.min.css +7 -0
  175. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/material-palenight.min.css +7 -0
  176. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/material-vivid.min.css +7 -0
  177. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/material.min.css +7 -0
  178. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/mellow-purple.min.css +7 -0
  179. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/mexico-light.min.css +7 -0
  180. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/mocha.min.css +7 -0
  181. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/monokai.min.css +7 -0
  182. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/nebula.min.css +7 -0
  183. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/nord.min.css +7 -0
  184. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/nova.min.css +7 -0
  185. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/ocean.min.css +7 -0
  186. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/oceanicnext.min.css +7 -0
  187. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/one-light.min.css +7 -0
  188. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/onedark.min.css +7 -0
  189. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/outrun-dark.min.css +7 -0
  190. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/papercolor-dark.min.css +7 -0
  191. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/papercolor-light.min.css +7 -0
  192. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/paraiso.min.css +7 -0
  193. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/pasque.min.css +7 -0
  194. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/phd.min.css +7 -0
  195. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/pico.min.css +7 -0
  196. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/pop.min.css +7 -0
  197. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/porple.min.css +7 -0
  198. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/qualia.min.css +7 -0
  199. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/railscasts.min.css +7 -0
  200. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/rebecca.min.css +7 -0
  201. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/ros-pine-dawn.min.css +7 -0
  202. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/ros-pine-moon.min.css +7 -0
  203. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/ros-pine.min.css +7 -0
  204. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/sagelight.min.css +7 -0
  205. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/sandcastle.min.css +7 -0
  206. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/seti-ui.min.css +7 -0
  207. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/shapeshifter.min.css +7 -0
  208. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/silk-dark.min.css +7 -0
  209. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/silk-light.min.css +7 -0
  210. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/snazzy.min.css +7 -0
  211. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/solar-flare-light.min.css +7 -0
  212. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/solar-flare.min.css +7 -0
  213. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/solarized-dark.min.css +7 -0
  214. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/solarized-light.min.css +7 -0
  215. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/spacemacs.min.css +7 -0
  216. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/summercamp.min.css +7 -0
  217. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/summerfruit-dark.min.css +7 -0
  218. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/summerfruit-light.min.css +7 -0
  219. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/synth-midnight-terminal-dark.min.css +7 -0
  220. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/synth-midnight-terminal-light.min.css +7 -0
  221. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/tango.min.css +7 -0
  222. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/tender.min.css +7 -0
  223. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/tomorrow-night.min.css +7 -0
  224. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/tomorrow.min.css +7 -0
  225. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/twilight.min.css +7 -0
  226. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/unikitty-dark.min.css +7 -0
  227. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/unikitty-light.min.css +7 -0
  228. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/vulcan.min.css +7 -0
  229. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/windows-10-light.min.css +7 -0
  230. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/windows-10.min.css +7 -0
  231. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/windows-95-light.min.css +7 -0
  232. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/windows-95.min.css +7 -0
  233. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/windows-high-contrast-light.min.css +7 -0
  234. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/windows-high-contrast.min.css +7 -0
  235. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/windows-nt-light.min.css +7 -0
  236. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/windows-nt.min.css +7 -0
  237. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/woodland.min.css +7 -0
  238. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/xcode-dusk.min.css +7 -0
  239. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/base16/zenburn.min.css +7 -0
  240. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/brown-paper.min.css +1 -0
  241. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/brown-papersq.png +0 -0
  242. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/codepen-embed.min.css +1 -0
  243. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/color-brewer.min.css +1 -0
  244. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/dark.min.css +1 -0
  245. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/default.min.css +9 -0
  246. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/devibeans.min.css +7 -0
  247. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/docco.min.css +1 -0
  248. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/far.min.css +1 -0
  249. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/felipec.min.css +7 -0
  250. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/foundation.min.css +1 -0
  251. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/github-dark-dimmed.min.css +9 -0
  252. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/github-dark.min.css +10 -0
  253. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/github.min.css +10 -0
  254. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/gml.min.css +1 -0
  255. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/googlecode.min.css +1 -0
  256. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/gradient-dark.min.css +1 -0
  257. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/gradient-light.min.css +1 -0
  258. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/grayscale.min.css +1 -0
  259. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/hybrid.min.css +1 -0
  260. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/idea.min.css +1 -0
  261. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/intellij-light.min.css +1 -0
  262. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/ir-black.min.css +1 -0
  263. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/isbl-editor-dark.min.css +1 -0
  264. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/isbl-editor-light.min.css +1 -0
  265. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/kimbie-dark.min.css +1 -0
  266. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/kimbie-light.min.css +1 -0
  267. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/lightfair.min.css +1 -0
  268. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/lioshi.min.css +1 -0
  269. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/magula.min.css +1 -0
  270. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/mono-blue.min.css +1 -0
  271. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/monokai-sublime.min.css +1 -0
  272. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/monokai.min.css +1 -0
  273. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/night-owl.min.css +1 -0
  274. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/nnfx-dark.min.css +10 -0
  275. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/nnfx-light.min.css +10 -0
  276. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/nord.min.css +1 -0
  277. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/obsidian.min.css +1 -0
  278. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/panda-syntax-dark.min.css +1 -0
  279. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/panda-syntax-light.min.css +1 -0
  280. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/paraiso-dark.min.css +1 -0
  281. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/paraiso-light.min.css +1 -0
  282. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/pojoaque.jpg +0 -0
  283. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/pojoaque.min.css +1 -0
  284. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/purebasic.min.css +1 -0
  285. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/qtcreator-dark.min.css +1 -0
  286. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/qtcreator-light.min.css +1 -0
  287. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/rainbow.min.css +1 -0
  288. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/routeros.min.css +1 -0
  289. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/school-book.min.css +1 -0
  290. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/shades-of-purple.min.css +1 -0
  291. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/srcery.min.css +1 -0
  292. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/stackoverflow-dark.min.css +13 -0
  293. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/stackoverflow-light.min.css +13 -0
  294. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/sunburst.min.css +1 -0
  295. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/tokyo-night-dark.min.css +8 -0
  296. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/tokyo-night-light.min.css +8 -0
  297. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/tomorrow-night-blue.min.css +1 -0
  298. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/tomorrow-night-bright.min.css +1 -0
  299. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/vs.min.css +1 -0
  300. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/vs2015.min.css +1 -0
  301. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/xcode.min.css +1 -0
  302. package/dist/public/vendor/vditor/dist/js/highlight.js/styles/xt256.min.css +1 -0
  303. package/dist/public/vendor/vditor/dist/js/highlight.js/third-languages.js +135 -0
  304. package/dist/public/vendor/vditor/dist/js/i18n/de_DE.js +86 -0
  305. package/dist/public/vendor/vditor/dist/js/i18n/en_US.js +86 -0
  306. package/dist/public/vendor/vditor/dist/js/i18n/es_ES.js +86 -0
  307. package/dist/public/vendor/vditor/dist/js/i18n/fr_FR.js +86 -0
  308. package/dist/public/vendor/vditor/dist/js/i18n/ja_JP.js +86 -0
  309. package/dist/public/vendor/vditor/dist/js/i18n/ko_KR.js +86 -0
  310. package/dist/public/vendor/vditor/dist/js/i18n/pt_BR.js +86 -0
  311. package/dist/public/vendor/vditor/dist/js/i18n/ru_RU.js +86 -0
  312. package/dist/public/vendor/vditor/dist/js/i18n/sv_SE.js +86 -0
  313. package/dist/public/vendor/vditor/dist/js/i18n/vi_VN.js +86 -0
  314. package/dist/public/vendor/vditor/dist/js/i18n/zh_CN.js +86 -0
  315. package/dist/public/vendor/vditor/dist/js/i18n/zh_TW.js +86 -0
  316. package/dist/public/vendor/vditor/dist/js/icons/ant.js +174 -0
  317. package/dist/public/vendor/vditor/dist/js/icons/material.js +195 -0
  318. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_AMS-Regular.ttf +0 -0
  319. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_AMS-Regular.woff +0 -0
  320. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  321. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
  322. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
  323. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  324. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
  325. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
  326. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  327. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
  328. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Fraktur-Bold.woff +0 -0
  329. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  330. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
  331. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Fraktur-Regular.woff +0 -0
  332. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  333. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Main-Bold.ttf +0 -0
  334. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Main-Bold.woff +0 -0
  335. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Main-Bold.woff2 +0 -0
  336. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
  337. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Main-BoldItalic.woff +0 -0
  338. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  339. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Main-Italic.ttf +0 -0
  340. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Main-Italic.woff +0 -0
  341. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Main-Italic.woff2 +0 -0
  342. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Main-Regular.ttf +0 -0
  343. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Main-Regular.woff +0 -0
  344. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Main-Regular.woff2 +0 -0
  345. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
  346. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Math-BoldItalic.woff +0 -0
  347. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  348. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Math-Italic.ttf +0 -0
  349. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Math-Italic.woff +0 -0
  350. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Math-Italic.woff2 +0 -0
  351. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
  352. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_SansSerif-Bold.woff +0 -0
  353. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  354. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
  355. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_SansSerif-Italic.woff +0 -0
  356. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  357. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
  358. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_SansSerif-Regular.woff +0 -0
  359. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  360. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Script-Regular.ttf +0 -0
  361. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Script-Regular.woff +0 -0
  362. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Script-Regular.woff2 +0 -0
  363. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Size1-Regular.ttf +0 -0
  364. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Size1-Regular.woff +0 -0
  365. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  366. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Size2-Regular.ttf +0 -0
  367. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Size2-Regular.woff +0 -0
  368. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  369. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Size3-Regular.ttf +0 -0
  370. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Size3-Regular.woff +0 -0
  371. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  372. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Size4-Regular.ttf +0 -0
  373. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Size4-Regular.woff +0 -0
  374. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  375. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
  376. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Typewriter-Regular.woff +0 -0
  377. package/dist/public/vendor/vditor/dist/js/katex/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  378. package/dist/public/vendor/vditor/dist/js/katex/katex.min.css +1 -0
  379. package/dist/public/vendor/vditor/dist/js/katex/katex.min.js +1 -0
  380. package/dist/public/vendor/vditor/dist/js/katex/mhchem.min.js +1 -0
  381. package/dist/public/vendor/vditor/dist/js/lute/lute.min.js +72 -0
  382. package/dist/public/vendor/vditor/dist/js/markmap/katex.min.css +1 -0
  383. package/dist/public/vendor/vditor/dist/js/markmap/markmap.min.js +8251 -0
  384. package/dist/public/vendor/vditor/dist/js/markmap/prism.css +140 -0
  385. package/dist/public/vendor/vditor/dist/js/mathjax/LICENSE +202 -0
  386. package/dist/public/vendor/vditor/dist/js/mathjax/a11y/assistive-mml.js +1 -0
  387. package/dist/public/vendor/vditor/dist/js/mathjax/a11y/complexity.js +1 -0
  388. package/dist/public/vendor/vditor/dist/js/mathjax/a11y/explorer.js +1 -0
  389. package/dist/public/vendor/vditor/dist/js/mathjax/a11y/semantic-enrich.js +1 -0
  390. package/dist/public/vendor/vditor/dist/js/mathjax/input/asciimath.js +1 -0
  391. package/dist/public/vendor/vditor/dist/js/mathjax/input/mml/entities.js +1 -0
  392. package/dist/public/vendor/vditor/dist/js/mathjax/input/mml.js +1 -0
  393. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/action.js +1 -0
  394. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/all-packages.js +1 -0
  395. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/ams.js +1 -0
  396. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/amscd.js +1 -0
  397. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/autoload.js +1 -0
  398. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/bbox.js +1 -0
  399. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/boldsymbol.js +1 -0
  400. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/braket.js +1 -0
  401. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/bussproofs.js +1 -0
  402. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/cancel.js +1 -0
  403. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/color.js +1 -0
  404. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/colorV2.js +1 -0
  405. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/configMacros.js +1 -0
  406. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/enclose.js +1 -0
  407. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/extpfeil.js +1 -0
  408. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/html.js +1 -0
  409. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/mhchem.js +1 -0
  410. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/newcommand.js +1 -0
  411. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/noerrors.js +1 -0
  412. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/noundefined.js +1 -0
  413. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/physics.js +1 -0
  414. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/require.js +1 -0
  415. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/tagFormat.js +1 -0
  416. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/textmacros.js +1 -0
  417. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/unicode.js +1 -0
  418. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex/extensions/verb.js +1 -0
  419. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex-base.js +1 -0
  420. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex-full.js +1 -0
  421. package/dist/public/vendor/vditor/dist/js/mathjax/input/tex.js +1 -0
  422. package/dist/public/vendor/vditor/dist/js/mathjax/sre/mathmaps/de.js +104 -0
  423. package/dist/public/vendor/vditor/dist/js/mathjax/sre/mathmaps/en.js +110 -0
  424. package/dist/public/vendor/vditor/dist/js/mathjax/sre/mathmaps/es.js +104 -0
  425. package/dist/public/vendor/vditor/dist/js/mathjax/sre/mathmaps/fr.js +104 -0
  426. package/dist/public/vendor/vditor/dist/js/mathjax/sre/mathmaps/mathmaps_ie.js +518 -0
  427. package/dist/public/vendor/vditor/dist/js/mathjax/sre/mathmaps/nemeth.js +104 -0
  428. package/dist/public/vendor/vditor/dist/js/mathjax/sre/sre-node.js +11 -0
  429. package/dist/public/vendor/vditor/dist/js/mathjax/sre/sre_browser.js +1633 -0
  430. package/dist/public/vendor/vditor/dist/js/mathjax/tex-svg-full.js +1 -0
  431. package/dist/public/vendor/vditor/dist/js/mermaid/mermaid.min.js +2607 -0
  432. package/dist/public/vendor/vditor/dist/js/plantuml/plantuml-encoder.min.js +1 -0
  433. package/dist/public/vendor/vditor/dist/js/smiles-drawer/smiles-drawer.min.js +71 -0
  434. package/dist/public/vendor/vditor/dist/method.d.ts +51 -0
  435. package/dist/public/vendor/vditor/dist/method.js +2673 -0
  436. package/dist/public/vendor/vditor/dist/method.min.js +1 -0
  437. package/dist/public/vendor/vditor/dist/ts/constants.d.ts +45 -0
  438. package/dist/public/vendor/vditor/dist/ts/devtools/index.d.ts +7 -0
  439. package/dist/public/vendor/vditor/dist/ts/export/index.d.ts +4 -0
  440. package/dist/public/vendor/vditor/dist/ts/hint/index.d.ts +14 -0
  441. package/dist/public/vendor/vditor/dist/ts/ir/expandMarker.d.ts +1 -0
  442. package/dist/public/vendor/vditor/dist/ts/ir/highlightToolbarIR.d.ts +1 -0
  443. package/dist/public/vendor/vditor/dist/ts/ir/index.d.ts +13 -0
  444. package/dist/public/vendor/vditor/dist/ts/ir/input.d.ts +1 -0
  445. package/dist/public/vendor/vditor/dist/ts/ir/process.d.ts +8 -0
  446. package/dist/public/vendor/vditor/dist/ts/ir/processKeydown.d.ts +1 -0
  447. package/dist/public/vendor/vditor/dist/ts/markdown/SMILESRender.d.ts +1 -0
  448. package/dist/public/vendor/vditor/dist/ts/markdown/abcRender.d.ts +1 -0
  449. package/dist/public/vendor/vditor/dist/ts/markdown/adapterRender.d.ts +41 -0
  450. package/dist/public/vendor/vditor/dist/ts/markdown/anchorRender.d.ts +1 -0
  451. package/dist/public/vendor/vditor/dist/ts/markdown/chartRender.d.ts +1 -0
  452. package/dist/public/vendor/vditor/dist/ts/markdown/codeRender.d.ts +1 -0
  453. package/dist/public/vendor/vditor/dist/ts/markdown/flowchartRender.d.ts +1 -0
  454. package/dist/public/vendor/vditor/dist/ts/markdown/getHTML.d.ts +1 -0
  455. package/dist/public/vendor/vditor/dist/ts/markdown/getMarkdown.d.ts +1 -0
  456. package/dist/public/vendor/vditor/dist/ts/markdown/graphvizRender.d.ts +1 -0
  457. package/dist/public/vendor/vditor/dist/ts/markdown/highlightRender.d.ts +1 -0
  458. package/dist/public/vendor/vditor/dist/ts/markdown/lazyLoadImageRender.d.ts +6 -0
  459. package/dist/public/vendor/vditor/dist/ts/markdown/markmapRender.d.ts +1 -0
  460. package/dist/public/vendor/vditor/dist/ts/markdown/mathRender.d.ts +9 -0
  461. package/dist/public/vendor/vditor/dist/ts/markdown/mediaRender.d.ts +1 -0
  462. package/dist/public/vendor/vditor/dist/ts/markdown/mermaidRender.d.ts +1 -0
  463. package/dist/public/vendor/vditor/dist/ts/markdown/mindmapRender.d.ts +1 -0
  464. package/dist/public/vendor/vditor/dist/ts/markdown/outlineRender.d.ts +1 -0
  465. package/dist/public/vendor/vditor/dist/ts/markdown/plantumlRender.d.ts +1 -0
  466. package/dist/public/vendor/vditor/dist/ts/markdown/previewRender.d.ts +2 -0
  467. package/dist/public/vendor/vditor/dist/ts/markdown/setLute.d.ts +1 -0
  468. package/dist/public/vendor/vditor/dist/ts/markdown/speechRender.d.ts +6 -0
  469. package/dist/public/vendor/vditor/dist/ts/outline/index.d.ts +7 -0
  470. package/dist/public/vendor/vditor/dist/ts/preview/image.d.ts +1 -0
  471. package/dist/public/vendor/vditor/dist/ts/preview/index.d.ts +10 -0
  472. package/dist/public/vendor/vditor/dist/ts/resize/index.d.ts +6 -0
  473. package/dist/public/vendor/vditor/dist/ts/sv/combineFootnote.d.ts +6 -0
  474. package/dist/public/vendor/vditor/dist/ts/sv/index.d.ts +13 -0
  475. package/dist/public/vendor/vditor/dist/ts/sv/inputEvent.d.ts +1 -0
  476. package/dist/public/vendor/vditor/dist/ts/sv/process.d.ts +11 -0
  477. package/dist/public/vendor/vditor/dist/ts/sv/processKeydown.d.ts +1 -0
  478. package/dist/public/vendor/vditor/dist/ts/tip/index.d.ts +6 -0
  479. package/dist/public/vendor/vditor/dist/ts/toolbar/Both.d.ts +5 -0
  480. package/dist/public/vendor/vditor/dist/ts/toolbar/Br.d.ts +4 -0
  481. package/dist/public/vendor/vditor/dist/ts/toolbar/CodeTheme.d.ts +6 -0
  482. package/dist/public/vendor/vditor/dist/ts/toolbar/ContentTheme.d.ts +6 -0
  483. package/dist/public/vendor/vditor/dist/ts/toolbar/Counter.d.ts +6 -0
  484. package/dist/public/vendor/vditor/dist/ts/toolbar/Custom.d.ts +5 -0
  485. package/dist/public/vendor/vditor/dist/ts/toolbar/Devtools.d.ts +5 -0
  486. package/dist/public/vendor/vditor/dist/ts/toolbar/Divider.d.ts +4 -0
  487. package/dist/public/vendor/vditor/dist/ts/toolbar/EditMode.d.ts +8 -0
  488. package/dist/public/vendor/vditor/dist/ts/toolbar/Emoji.d.ts +7 -0
  489. package/dist/public/vendor/vditor/dist/ts/toolbar/Export.d.ts +6 -0
  490. package/dist/public/vendor/vditor/dist/ts/toolbar/Fullscreen.d.ts +6 -0
  491. package/dist/public/vendor/vditor/dist/ts/toolbar/Headings.d.ts +7 -0
  492. package/dist/public/vendor/vditor/dist/ts/toolbar/Help.d.ts +5 -0
  493. package/dist/public/vendor/vditor/dist/ts/toolbar/Indent.d.ts +5 -0
  494. package/dist/public/vendor/vditor/dist/ts/toolbar/Info.d.ts +5 -0
  495. package/dist/public/vendor/vditor/dist/ts/toolbar/InsertAfter.d.ts +5 -0
  496. package/dist/public/vendor/vditor/dist/ts/toolbar/InsertBefore.d.ts +5 -0
  497. package/dist/public/vendor/vditor/dist/ts/toolbar/MenuItem.d.ts +5 -0
  498. package/dist/public/vendor/vditor/dist/ts/toolbar/Outdent.d.ts +5 -0
  499. package/dist/public/vendor/vditor/dist/ts/toolbar/Outline.d.ts +5 -0
  500. package/dist/public/vendor/vditor/dist/ts/toolbar/Preview.d.ts +6 -0
  501. package/dist/public/vendor/vditor/dist/ts/toolbar/Record.d.ts +6 -0
  502. package/dist/public/vendor/vditor/dist/ts/toolbar/Redo.d.ts +5 -0
  503. package/dist/public/vendor/vditor/dist/ts/toolbar/Undo.d.ts +5 -0
  504. package/dist/public/vendor/vditor/dist/ts/toolbar/Upload.d.ts +6 -0
  505. package/dist/public/vendor/vditor/dist/ts/toolbar/index.d.ts +10 -0
  506. package/dist/public/vendor/vditor/dist/ts/toolbar/setToolbar.d.ts +20 -0
  507. package/dist/public/vendor/vditor/dist/ts/ui/initUI.d.ts +4 -0
  508. package/dist/public/vendor/vditor/dist/ts/ui/setCodeTheme.d.ts +1 -0
  509. package/dist/public/vendor/vditor/dist/ts/ui/setContentTheme.d.ts +1 -0
  510. package/dist/public/vendor/vditor/dist/ts/ui/setPreviewMode.d.ts +1 -0
  511. package/dist/public/vendor/vditor/dist/ts/ui/setTheme.d.ts +1 -0
  512. package/dist/public/vendor/vditor/dist/ts/undo/index.d.ts +19 -0
  513. package/dist/public/vendor/vditor/dist/ts/upload/getElement.d.ts +1 -0
  514. package/dist/public/vendor/vditor/dist/ts/upload/index.d.ts +8 -0
  515. package/dist/public/vendor/vditor/dist/ts/upload/setHeaders.d.ts +1 -0
  516. package/dist/public/vendor/vditor/dist/ts/util/Options.d.ts +8 -0
  517. package/dist/public/vendor/vditor/dist/ts/util/RecordMedia.d.ts +18 -0
  518. package/dist/public/vendor/vditor/dist/ts/util/addScript.d.ts +2 -0
  519. package/dist/public/vendor/vditor/dist/ts/util/addStyle.d.ts +1 -0
  520. package/dist/public/vendor/vditor/dist/ts/util/code160to32.d.ts +1 -0
  521. package/dist/public/vendor/vditor/dist/ts/util/compatibility.d.ts +7 -0
  522. package/dist/public/vendor/vditor/dist/ts/util/editorCommonEvent.d.ts +9 -0
  523. package/dist/public/vendor/vditor/dist/ts/util/fixBrowserBehavior.d.ts +39 -0
  524. package/dist/public/vendor/vditor/dist/ts/util/function.d.ts +3 -0
  525. package/dist/public/vendor/vditor/dist/ts/util/getSelectText.d.ts +1 -0
  526. package/dist/public/vendor/vditor/dist/ts/util/hasClosest.d.ts +9 -0
  527. package/dist/public/vendor/vditor/dist/ts/util/hasClosestByHeadings.d.ts +2 -0
  528. package/dist/public/vendor/vditor/dist/ts/util/highlightToolbar.d.ts +1 -0
  529. package/dist/public/vendor/vditor/dist/ts/util/hotKey.d.ts +1 -0
  530. package/dist/public/vendor/vditor/dist/ts/util/log.d.ts +1 -0
  531. package/dist/public/vendor/vditor/dist/ts/util/merge.d.ts +1 -0
  532. package/dist/public/vendor/vditor/dist/ts/util/processCode.d.ts +2 -0
  533. package/dist/public/vendor/vditor/dist/ts/util/selection.d.ts +14 -0
  534. package/dist/public/vendor/vditor/dist/ts/util/toc.d.ts +5 -0
  535. package/dist/public/vendor/vditor/dist/ts/wysiwyg/afterRenderEvent.d.ts +5 -0
  536. package/dist/public/vendor/vditor/dist/ts/wysiwyg/highlightToolbarWYSIWYG.d.ts +4 -0
  537. package/dist/public/vendor/vditor/dist/ts/wysiwyg/index.d.ts +22 -0
  538. package/dist/public/vendor/vditor/dist/ts/wysiwyg/inlineTag.d.ts +10 -0
  539. package/dist/public/vendor/vditor/dist/ts/wysiwyg/input.d.ts +1 -0
  540. package/dist/public/vendor/vditor/dist/ts/wysiwyg/processKeydown.d.ts +2 -0
  541. package/dist/public/vendor/vditor/dist/ts/wysiwyg/renderDomByMd.d.ts +5 -0
  542. package/dist/public/vendor/vditor/dist/ts/wysiwyg/setHeading.d.ts +2 -0
  543. package/dist/public/vendor/vditor/dist/ts/wysiwyg/showCode.d.ts +1 -0
  544. package/dist/public/vendor/vditor/dist/ts/wysiwyg/toolbarEvent.d.ts +1 -0
  545. package/dist/public/vendor/vditor/dist/types/index.d.ts +921 -0
  546. package/dist/public/work-permissions.d.ts +5 -2
  547. package/dist/public/work-permissions.js +40 -13
  548. package/dist/security.js +11 -0
  549. package/dist/security.js.map +1 -1
  550. package/dist/server-runtime.js +5 -2
  551. package/dist/server-runtime.js.map +1 -1
  552. package/dist/store.js +252 -43
  553. package/dist/store.js.map +1 -1
  554. package/dist/user-auth.js +40 -8
  555. package/dist/user-auth.js.map +1 -1
  556. package/dist/version.js +1 -1
  557. package/dist/version.js.map +1 -1
  558. package/dist/work-permissions.js +30 -6
  559. package/dist/work-permissions.js.map +1 -1
  560. package/package.json +2 -1
package/dist/store.js CHANGED
@@ -6,6 +6,72 @@ import { paginated, paginationSql } from "./pagination.js";
6
6
  import { currentRequestActor } from "./request-context.js";
7
7
  import { classifyWorkModulePermissions, emptyWorkModulePermissions, fullWorkModulePermissions, storedWorkModulePermissions } from "./work-permissions.js";
8
8
  import { countWords, documentShortSearchTerms, id, json, normalizeDocumentSearchText, normalizeParagraphSpacing, now, splitDocumentParagraphs } from "./utils.js";
9
+ function settingsFromInput(settingsMarkdown, settings, fallback = []) {
10
+ if (settingsMarkdown !== undefined)
11
+ return settingsMarkdown.trim() ? [settingsMarkdown] : [];
12
+ return settings ?? fallback;
13
+ }
14
+ function settingsMarkdownFromList(settings) {
15
+ return Array.isArray(settings) ? settings.map(String).filter(Boolean).join("\n\n") : "";
16
+ }
17
+ function knowledgeSectionTitle(contentMarkdown, index) {
18
+ const heading = contentMarkdown.match(/^\s{0,3}#{1,6}\s+(.+?)\s*#*\s*$/mu)?.[1]?.trim();
19
+ return heading || `设定 ${index + 1}`;
20
+ }
21
+ function normalizeKnowledgeSections(sections) {
22
+ return sections.map((section, index) => {
23
+ const contentMarkdown = section.contentMarkdown ?? "";
24
+ return {
25
+ title: section.title.trim() || knowledgeSectionTitle(contentMarkdown, index),
26
+ contentMarkdown,
27
+ summary: section.summary?.trim() ?? "",
28
+ sortOrder: Number.isFinite(section.sortOrder) ? Math.max(0, Math.trunc(section.sortOrder)) : index
29
+ };
30
+ });
31
+ }
32
+ function knowledgeSectionInput(value, index) {
33
+ if (!isRecord(value))
34
+ return null;
35
+ const contentMarkdown = typeof value.contentMarkdown === "string"
36
+ ? value.contentMarkdown
37
+ : typeof value.content === "string" ? value.content : "";
38
+ const title = typeof value.title === "string" ? value.title : "";
39
+ return {
40
+ title: title || knowledgeSectionTitle(contentMarkdown, index),
41
+ contentMarkdown,
42
+ summary: typeof value.summary === "string" ? value.summary : "",
43
+ sortOrder: typeof value.sortOrder === "number" ? value.sortOrder : index
44
+ };
45
+ }
46
+ function knowledgeSectionsFromStored(value, fallback = []) {
47
+ const parsed = typeof value === "string" ? json(value, []) : value;
48
+ if (Array.isArray(parsed)) {
49
+ const sections = parsed.map((item, index) => knowledgeSectionInput(item, index)).filter((item) => item !== null);
50
+ if (sections.length > 0 || fallback.length === 0)
51
+ return normalizeKnowledgeSections(sections);
52
+ }
53
+ return normalizeKnowledgeSections(fallback.map((contentMarkdown, index) => ({
54
+ title: knowledgeSectionTitle(contentMarkdown, index),
55
+ contentMarkdown,
56
+ sortOrder: index
57
+ })));
58
+ }
59
+ function knowledgeSectionsFromInput(sections, settingsMarkdown, settings, fallbackSections = []) {
60
+ if (sections !== undefined)
61
+ return normalizeKnowledgeSections(sections);
62
+ if (settingsMarkdown !== undefined || settings !== undefined) {
63
+ const legacySettings = settingsFromInput(settingsMarkdown, settings);
64
+ return knowledgeSectionsFromStored(legacySettings.map((contentMarkdown, index) => ({
65
+ title: knowledgeSectionTitle(contentMarkdown, index),
66
+ contentMarkdown,
67
+ sortOrder: index
68
+ })));
69
+ }
70
+ return fallbackSections;
71
+ }
72
+ function settingsFromKnowledgeSections(sections) {
73
+ return sections.map((section) => section.contentMarkdown).filter((content) => content.trim());
74
+ }
9
75
  export const versionedEntityTypes = [
10
76
  "work",
11
77
  "volume",
@@ -18,6 +84,65 @@ export const versionedEntityTypes = [
18
84
  "chapter-outline",
19
85
  "foreshadow"
20
86
  ];
87
+ function isRecord(value) {
88
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
89
+ }
90
+ function invalidFileSnapshot() {
91
+ throw new AppError(409, "FILE_VERSION_INVALID", "正文历史快照已损坏,未执行恢复");
92
+ }
93
+ function parseRestorableFileSnapshot(value, workId) {
94
+ let parsed;
95
+ try {
96
+ parsed = JSON.parse(value);
97
+ }
98
+ catch {
99
+ invalidFileSnapshot();
100
+ }
101
+ if (!isRecord(parsed) || parsed.id !== workId || !Array.isArray(parsed.volumes) || parsed.volumes.length > 10_000) {
102
+ return invalidFileSnapshot();
103
+ }
104
+ let chapterCount = 0;
105
+ let contentLength = 0;
106
+ const volumes = parsed.volumes.map((volumeValue) => {
107
+ if (!isRecord(volumeValue) || typeof volumeValue.title !== "string" || typeof volumeValue.kind !== "string"
108
+ || typeof volumeValue.source !== "string" || typeof volumeValue.sortOrder !== "number"
109
+ || !Number.isFinite(volumeValue.sortOrder) || !Array.isArray(volumeValue.chapters)) {
110
+ return invalidFileSnapshot();
111
+ }
112
+ const description = volumeValue.description === undefined ? "" : volumeValue.description;
113
+ const keywords = volumeValue.keywords === undefined ? [] : volumeValue.keywords;
114
+ if (typeof description !== "string" || !Array.isArray(keywords) || !keywords.every((keyword) => typeof keyword === "string")) {
115
+ return invalidFileSnapshot();
116
+ }
117
+ const chapters = volumeValue.chapters.map((chapterValue) => {
118
+ if (!isRecord(chapterValue) || typeof chapterValue.title !== "string" || typeof chapterValue.content !== "string"
119
+ || typeof chapterValue.sortOrder !== "number" || !Number.isFinite(chapterValue.sortOrder)
120
+ || !["正文", "设定", "作者的话", "其他"].includes(String(chapterValue.chapterType))) {
121
+ return invalidFileSnapshot();
122
+ }
123
+ chapterCount += 1;
124
+ contentLength += chapterValue.content.length;
125
+ if (chapterCount > 100_000 || contentLength > 20_000_000)
126
+ return invalidFileSnapshot();
127
+ return {
128
+ title: chapterValue.title,
129
+ content: chapterValue.content,
130
+ sortOrder: chapterValue.sortOrder,
131
+ chapterType: chapterValue.chapterType
132
+ };
133
+ });
134
+ return {
135
+ title: volumeValue.title,
136
+ kind: volumeValue.kind,
137
+ source: volumeValue.source,
138
+ description,
139
+ keywords: [...keywords],
140
+ sortOrder: volumeValue.sortOrder,
141
+ chapters
142
+ };
143
+ });
144
+ return { volumes };
145
+ }
21
146
  function requiredString(row, key) {
22
147
  return String(row[key] ?? "");
23
148
  }
@@ -145,6 +270,7 @@ export class Store {
145
270
  parentRaceId: entity.parentRaceId,
146
271
  description: entity.description,
147
272
  settings: entity.settings,
273
+ settingsSections: entity.settingsSections,
148
274
  memberIds: entity.memberIds
149
275
  };
150
276
  if (type === "organization")
@@ -152,6 +278,7 @@ export class Store {
152
278
  name: entity.name,
153
279
  description: entity.description,
154
280
  settings: entity.settings,
281
+ settingsSections: entity.settingsSections,
155
282
  memberIds: entity.memberIds
156
283
  };
157
284
  if (type === "timeline-track")
@@ -655,7 +782,7 @@ export class Store {
655
782
  .all(`SELECT version.id, version.work_id, version.file_name, version.file_type, version.word_count, version.paragraph_count,
656
783
  version.warnings_json, version.created_at, user.display_name AS actor_display_name, user.username AS actor_username
657
784
  FROM file_versions version LEFT JOIN users user ON user.id = version.created_by_user_id
658
- WHERE version.work_id = ? ORDER BY version.created_at DESC`, workId)
785
+ WHERE version.work_id = ? ORDER BY version.created_at DESC, version.id DESC`, workId)
659
786
  .map((row) => ({
660
787
  id: requiredString(row, "id"),
661
788
  workId: requiredString(row, "work_id"),
@@ -674,7 +801,7 @@ export class Store {
674
801
  const rows = this.db.all(`SELECT version.id, version.work_id, version.file_name, version.file_type, version.word_count, version.paragraph_count,
675
802
  version.warnings_json, version.created_at, user.display_name AS actor_display_name, user.username AS actor_username
676
803
  FROM file_versions version LEFT JOIN users user ON user.id = version.created_by_user_id
677
- WHERE version.work_id = ? ORDER BY version.created_at DESC${page.sql}`, workId, ...page.params);
804
+ WHERE version.work_id = ? ORDER BY version.created_at DESC, version.id DESC${page.sql}`, workId, ...page.params);
678
805
  return paginated(rows.map((row) => ({
679
806
  id: requiredString(row, "id"),
680
807
  workId: requiredString(row, "work_id"),
@@ -692,8 +819,7 @@ export class Store {
692
819
  const version = this.db.get("SELECT * FROM file_versions WHERE id = ? AND work_id = ?", fileVersionId, workId);
693
820
  if (!version)
694
821
  throw notFound("文件版本");
695
- const snapshot = json(requiredString(version, "snapshot_json"), {});
696
- const volumes = Array.isArray(snapshot.volumes) ? snapshot.volumes : [];
822
+ const { volumes } = parseRestorableFileSnapshot(requiredString(version, "snapshot_json"), workId);
697
823
  return this.db.transaction(() => {
698
824
  const current = this.getWork(workId);
699
825
  this.assertExpectedVersion("work", workId, expectedVersionNo, "作品", Number(current.versionNo));
@@ -714,20 +840,16 @@ export class Store {
714
840
  this.db.run("DELETE FROM volumes WHERE work_id = ?", workId);
715
841
  for (const volume of volumes) {
716
842
  const volumeId = id("volume");
717
- const chapters = Array.isArray(volume.chapters) ? volume.chapters : [];
718
843
  this.insertVolumeWithId(workId, volumeId, {
719
- title: String(volume.title ?? "正文"),
720
- kind: String(volume.kind ?? "main"),
721
- source: String(volume.source ?? "manual"),
722
- description: String(volume.description ?? ""),
723
- keywords: Array.isArray(volume.keywords) ? volume.keywords : [],
724
- sortOrder: Number(volume.sortOrder ?? 0)
844
+ title: volume.title,
845
+ kind: volume.kind,
846
+ source: volume.source,
847
+ description: volume.description,
848
+ keywords: volume.keywords,
849
+ sortOrder: volume.sortOrder
725
850
  }, "restore", fileVersionId, `恢复文件版本 ${fileVersionId}`);
726
- for (const chapter of chapters) {
727
- const chapterType = (["正文", "设定", "作者的话", "其他"].includes(String(chapter.chapterType))
728
- ? String(chapter.chapterType)
729
- : "正文");
730
- this.insertChapter(workId, volumeId, String(chapter.title ?? "未命名章节"), String(chapter.content ?? ""), Number(chapter.sortOrder ?? 0), "restore", fileVersionId, chapterType);
851
+ for (const chapter of volume.chapters) {
852
+ this.insertChapter(workId, volumeId, chapter.title, chapter.content, chapter.sortOrder, "restore", fileVersionId, chapter.chapterType);
731
853
  }
732
854
  }
733
855
  this.db.run("UPDATE works SET version_no = version_no + 1, updated_at = ? WHERE id = ?", timestamp, workId);
@@ -1566,9 +1688,11 @@ export class Store {
1566
1688
  }
1567
1689
  insertSettingWithId(workId, settingId, input, source = "create", sourceRef = null, changeNote = "") {
1568
1690
  const timestamp = now();
1691
+ const content = input.content;
1569
1692
  this.db.transaction(() => {
1570
1693
  this.db.run(`INSERT INTO settings (id, work_id, title, category, content, tags_json, status, locked, evidence_json, scope_json, author_note, created_at, updated_at)
1571
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, settingId, workId, input.title, input.category, input.content, JSON.stringify(input.tags ?? []), input.status ?? "draft", input.locked ? 1 : 0, JSON.stringify(input.evidence ?? []), JSON.stringify(input.scope ?? {}), input.authorNote ?? "", timestamp, timestamp);
1694
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, settingId, workId, input.title, input.category, content, JSON.stringify(input.tags ?? []), input.status ?? "draft", input.locked ? 1 : 0, JSON.stringify(input.evidence ?? []), JSON.stringify(input.scope ?? {}), input.authorNote ?? "", timestamp, timestamp);
1695
+ this.syncMarkdownAttachmentReferences(workId, "setting", settingId, content);
1572
1696
  this.recordEntityVersion("setting", settingId, source, sourceRef, changeNote || "建立世界观设定", timestamp);
1573
1697
  this.audit(workId, source === "restore" ? "setting.restored" : "setting.created", "setting", settingId, {
1574
1698
  locked: input.locked ?? false,
@@ -1596,10 +1720,12 @@ export class Store {
1596
1720
  }
1597
1721
  updateSetting(settingId, input, source = "manual", sourceRef = null, changeNote = "", expectedVersionNo) {
1598
1722
  const current = this.getSetting(settingId);
1723
+ const content = input.content ?? String(current.content);
1599
1724
  this.db.transaction(() => {
1600
1725
  this.assertExpectedVersion("setting", settingId, expectedVersionNo, "设定");
1601
1726
  this.db.run(`UPDATE settings SET title = ?, category = ?, content = ?, tags_json = ?, status = ?, locked = ?,
1602
- evidence_json = ?, scope_json = ?, author_note = ?, updated_at = ? WHERE id = ?`, input.title ?? String(current.title), input.category ?? String(current.category), input.content ?? String(current.content), JSON.stringify(input.tags ?? current.tags), input.status ?? String(current.status), (input.locked ?? Boolean(current.locked)) ? 1 : 0, JSON.stringify(input.evidence ?? current.evidence), JSON.stringify(input.scope ?? current.scope), input.authorNote ?? String(current.authorNote), now(), settingId);
1727
+ evidence_json = ?, scope_json = ?, author_note = ?, updated_at = ? WHERE id = ?`, input.title ?? String(current.title), input.category ?? String(current.category), content, JSON.stringify(input.tags ?? current.tags), input.status ?? String(current.status), (input.locked ?? Boolean(current.locked)) ? 1 : 0, JSON.stringify(input.evidence ?? current.evidence), JSON.stringify(input.scope ?? current.scope), input.authorNote ?? String(current.authorNote), now(), settingId);
1728
+ this.syncMarkdownAttachmentReferences(String(current.workId), "setting", settingId, content);
1603
1729
  this.recordEntityVersion("setting", settingId, source, sourceRef, changeNote || "更新世界观设定");
1604
1730
  this.audit(String(current.workId), "setting.updated", "setting", settingId, { fields: Object.keys(input), source, sourceRef });
1605
1731
  });
@@ -1610,6 +1736,7 @@ export class Store {
1610
1736
  this.db.transaction(() => {
1611
1737
  this.assertExpectedVersion("setting", settingId, expectedVersionNo, "设定");
1612
1738
  this.recordEntityVersion("setting", settingId, "delete", null, "删除世界观设定");
1739
+ this.clearMarkdownAttachmentReferences("setting", settingId);
1613
1740
  this.db.run("DELETE FROM settings WHERE id = ?", settingId);
1614
1741
  this.audit(String(current.workId), "setting.deleted", "setting", settingId);
1615
1742
  });
@@ -1647,10 +1774,13 @@ export class Store {
1647
1774
  const memberIds = [...new Set(input.memberIds ?? [])];
1648
1775
  this.assertCharactersInWork(workId, memberIds);
1649
1776
  const memberSnapshots = this.captureCharacterSnapshots(memberIds);
1777
+ const settingsSections = knowledgeSectionsFromInput(input.settingsSections, input.settingsMarkdown, input.settings);
1778
+ const settings = settingsFromKnowledgeSections(settingsSections);
1650
1779
  const timestamp = now();
1651
1780
  this.db.transaction(() => {
1652
- this.db.run(`INSERT INTO races (id, work_id, parent_race_id, name, normalized_name, description, settings_json, created_at, updated_at)
1653
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, raceId, workId, parentRaceId, name, normalizedName, input.description ?? "", JSON.stringify(input.settings ?? []), timestamp, timestamp);
1781
+ this.db.run(`INSERT INTO races (id, work_id, parent_race_id, name, normalized_name, description, settings_json, settings_sections_json, created_at, updated_at)
1782
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, raceId, workId, parentRaceId, name, normalizedName, input.description ?? "", JSON.stringify(settings), JSON.stringify(settingsSections), timestamp, timestamp);
1783
+ this.syncMarkdownAttachmentReferences(workId, "race", raceId, settingsMarkdownFromList(settings));
1654
1784
  this.replaceRaceMembers(raceId, name, memberIds);
1655
1785
  this.recordMembershipVersions(memberSnapshots, "race", raceId, `设为种族“${name}”`);
1656
1786
  this.recordEntityVersion("race", raceId, source, sourceRef, changeNote || "建立种族档案", timestamp);
@@ -1696,9 +1826,13 @@ export class Store {
1696
1826
  ? [...new Set([...current.memberIds, ...(memberIds ?? [])])]
1697
1827
  : [];
1698
1828
  const memberSnapshots = this.captureCharacterSnapshots(touchedMemberIds);
1829
+ const currentSections = knowledgeSectionsFromStored(current.settingsSections, current.settings);
1830
+ const settingsSections = knowledgeSectionsFromInput(input.settingsSections, input.settingsMarkdown, input.settings, currentSections);
1831
+ const settings = settingsFromKnowledgeSections(settingsSections);
1699
1832
  this.db.transaction(() => {
1700
1833
  this.assertExpectedVersion("race", raceId, expectedVersionNo, "种族");
1701
- this.db.run(`UPDATE races SET parent_race_id = ?, name = ?, normalized_name = ?, description = ?, settings_json = ?, updated_at = ? WHERE id = ?`, parentRaceId, name, normalizedName, input.description ?? String(current.description), JSON.stringify(input.settings ?? current.settings), now(), raceId);
1834
+ this.db.run(`UPDATE races SET parent_race_id = ?, name = ?, normalized_name = ?, description = ?, settings_json = ?, settings_sections_json = ?, updated_at = ? WHERE id = ?`, parentRaceId, name, normalizedName, input.description ?? String(current.description), JSON.stringify(settings), JSON.stringify(settingsSections), now(), raceId);
1835
+ this.syncMarkdownAttachmentReferences(workId, "race", raceId, settingsMarkdownFromList(settings));
1702
1836
  if (nameChanged)
1703
1837
  this.db.run("UPDATE characters SET species = ?, updated_at = ? WHERE race_id = ?", name, now(), raceId);
1704
1838
  if (memberIds)
@@ -1720,6 +1854,7 @@ export class Store {
1720
1854
  this.assertExpectedVersion("race", raceId, expectedVersionNo, "种族");
1721
1855
  this.recordEntityVersion("race", raceId, "delete", null, "删除种族档案");
1722
1856
  this.db.run("UPDATE characters SET race_id = NULL, species = '', updated_at = ? WHERE race_id = ?", now(), raceId);
1857
+ this.clearMarkdownAttachmentReferences("race", raceId);
1723
1858
  this.db.run("DELETE FROM races WHERE id = ?", raceId);
1724
1859
  this.recordMembershipVersions(memberSnapshots, "race", raceId, `种族“${String(current.name)}”已删除`);
1725
1860
  this.audit(String(current.workId), "race.deleted", "race", raceId);
@@ -1746,15 +1881,19 @@ export class Store {
1746
1881
  : target.parentRaceId;
1747
1882
  const descriptionParts = [String(target.description).trim(), String(source.description).trim()].filter(Boolean);
1748
1883
  const description = [...new Set(descriptionParts)].join("\n\n");
1749
- const settings = [...new Set([...target.settings, ...source.settings])];
1884
+ const settingsSections = [...knowledgeSectionsFromStored(target.settingsSections, target.settings), ...knowledgeSectionsFromStored(source.settingsSections, source.settings)]
1885
+ .map((section, index) => ({ ...section, sortOrder: index }));
1886
+ const settings = settingsFromKnowledgeSections(settingsSections);
1750
1887
  this.db.transaction(() => {
1751
1888
  this.recordEntityVersion("race", sourceRaceId, "delete", mergeId, `合并至种族“${String(target.name)}”`, timestamp);
1752
- this.db.run("UPDATE races SET parent_race_id = ?, description = ?, settings_json = ?, updated_at = ? WHERE id = ?", targetParentRaceId, description, JSON.stringify(settings), timestamp, targetRaceId);
1889
+ this.db.run("UPDATE races SET parent_race_id = ?, description = ?, settings_json = ?, settings_sections_json = ?, updated_at = ? WHERE id = ?", targetParentRaceId, description, JSON.stringify(settings), JSON.stringify(settingsSections), timestamp, targetRaceId);
1890
+ this.syncMarkdownAttachmentReferences(workId, "race", targetRaceId, settingsMarkdownFromList(settings));
1753
1891
  this.db.run("UPDATE characters SET race_id = ?, species = ?, updated_at = ? WHERE race_id = ?", targetRaceId, String(target.name), timestamp, sourceRaceId);
1754
1892
  for (const childRaceId of sourceChildren) {
1755
1893
  this.db.run("UPDATE races SET parent_race_id = ?, updated_at = ? WHERE id = ?", targetRaceId, timestamp, childRaceId);
1756
1894
  this.recordEntityVersion("race", childRaceId, "merge", mergeId, `因种族“${String(source.name)}”合并而迁移父种族`, timestamp);
1757
1895
  }
1896
+ this.clearMarkdownAttachmentReferences("race", sourceRaceId);
1758
1897
  this.db.run("DELETE FROM races WHERE id = ?", sourceRaceId);
1759
1898
  this.recordMembershipVersions(memberSnapshots, "race", targetRaceId, `合并种族“${String(source.name)}”`);
1760
1899
  this.recordEntityVersion("race", targetRaceId, "merge", mergeId, `合并种族“${String(source.name)}”`, timestamp);
@@ -1772,6 +1911,8 @@ export class Store {
1772
1911
  mapRace(row) {
1773
1912
  const raceId = requiredString(row, "id");
1774
1913
  const lineage = this.raceLineage(raceId);
1914
+ const settingsSections = knowledgeSectionsFromStored(row.settings_sections_json, json(requiredString(row, "settings_json"), []));
1915
+ const settings = settingsFromKnowledgeSections(settingsSections);
1775
1916
  const members = this.db.all("SELECT id, name FROM characters WHERE race_id = ? ORDER BY name", requiredString(row, "id")).map((member) => ({
1776
1917
  characterId: requiredString(member, "id"),
1777
1918
  name: requiredString(member, "name")
@@ -1782,10 +1923,15 @@ export class Store {
1782
1923
  parentRaceId: optionalString(row, "parent_race_id"),
1783
1924
  name: requiredString(row, "name"),
1784
1925
  description: requiredString(row, "description"),
1785
- settings: json(requiredString(row, "settings_json"), []),
1926
+ settings,
1927
+ settingsMarkdown: settingsMarkdownFromList(settings),
1928
+ settingsSections,
1786
1929
  lineage: lineage.map((item) => ({ id: item.id, name: item.name })),
1787
- effectiveSettings: lineage.flatMap((item, index) => item.settings.map((value) => ({
1788
- value,
1930
+ effectiveSettings: lineage.flatMap((item, index) => item.settingsSections.map((section) => ({
1931
+ title: section.title,
1932
+ summary: section.summary,
1933
+ sortOrder: section.sortOrder,
1934
+ value: section.contentMarkdown,
1789
1935
  sourceRaceId: item.id,
1790
1936
  sourceRaceName: item.name,
1791
1937
  inherited: index < lineage.length - 1
@@ -1835,13 +1981,15 @@ export class Store {
1835
1981
  if (seen.has(currentId))
1836
1982
  throw new AppError(500, "RACE_HIERARCHY_INVALID", "种族层级存在循环");
1837
1983
  seen.add(currentId);
1838
- const row = this.db.get("SELECT id, name, settings_json, parent_race_id FROM races WHERE id = ?", currentId);
1984
+ const row = this.db.get("SELECT id, name, settings_json, settings_sections_json, parent_race_id FROM races WHERE id = ?", currentId);
1839
1985
  if (!row)
1840
1986
  throw new AppError(500, "RACE_HIERARCHY_INVALID", "种族层级引用了不存在的父种族");
1987
+ const settingsSections = knowledgeSectionsFromStored(row.settings_sections_json, json(requiredString(row, "settings_json"), []));
1841
1988
  lineage.push({
1842
1989
  id: requiredString(row, "id"),
1843
1990
  name: requiredString(row, "name"),
1844
- settings: json(requiredString(row, "settings_json"), [])
1991
+ settings: settingsFromKnowledgeSections(settingsSections),
1992
+ settingsSections
1845
1993
  });
1846
1994
  currentId = optionalString(row, "parent_race_id");
1847
1995
  }
@@ -1867,10 +2015,13 @@ export class Store {
1867
2015
  const memberIds = [...new Set(input.memberIds ?? [])];
1868
2016
  this.assertCharactersInWork(workId, memberIds);
1869
2017
  const memberSnapshots = this.captureCharacterSnapshots(memberIds);
2018
+ const settingsSections = knowledgeSectionsFromInput(input.settingsSections, input.settingsMarkdown, input.settings);
2019
+ const settings = settingsFromKnowledgeSections(settingsSections);
1870
2020
  const timestamp = now();
1871
2021
  this.db.transaction(() => {
1872
- this.db.run(`INSERT INTO organizations (id, work_id, name, normalized_name, description, settings_json, created_at, updated_at)
1873
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, organizationId, workId, name, normalizedName, input.description ?? "", JSON.stringify(input.settings ?? []), timestamp, timestamp);
2022
+ this.db.run(`INSERT INTO organizations (id, work_id, name, normalized_name, description, settings_json, settings_sections_json, created_at, updated_at)
2023
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, organizationId, workId, name, normalizedName, input.description ?? "", JSON.stringify(settings), JSON.stringify(settingsSections), timestamp, timestamp);
2024
+ this.syncMarkdownAttachmentReferences(workId, "organization", organizationId, settingsMarkdownFromList(settings));
1874
2025
  this.replaceOrganizationMembers(organizationId, memberIds);
1875
2026
  this.recordMembershipVersions(memberSnapshots, "organization", organizationId, `加入组织“${name}”`);
1876
2027
  this.recordEntityVersion("organization", organizationId, source, sourceRef, changeNote || "建立组织档案", timestamp);
@@ -1909,9 +2060,13 @@ export class Store {
1909
2060
  this.assertCharactersInWork(workId, memberIds);
1910
2061
  const touchedMemberIds = memberIds ? [...new Set([...current.memberIds, ...memberIds])] : [];
1911
2062
  const memberSnapshots = this.captureCharacterSnapshots(touchedMemberIds);
2063
+ const currentSections = knowledgeSectionsFromStored(current.settingsSections, current.settings);
2064
+ const settingsSections = knowledgeSectionsFromInput(input.settingsSections, input.settingsMarkdown, input.settings, currentSections);
2065
+ const settings = settingsFromKnowledgeSections(settingsSections);
1912
2066
  this.db.transaction(() => {
1913
2067
  this.assertExpectedVersion("organization", organizationId, expectedVersionNo, "组织");
1914
- this.db.run(`UPDATE organizations SET name = ?, normalized_name = ?, description = ?, settings_json = ?, updated_at = ? WHERE id = ?`, name, normalizedName, input.description ?? String(current.description), JSON.stringify(input.settings ?? current.settings), now(), organizationId);
2068
+ this.db.run(`UPDATE organizations SET name = ?, normalized_name = ?, description = ?, settings_json = ?, settings_sections_json = ?, updated_at = ? WHERE id = ?`, name, normalizedName, input.description ?? String(current.description), JSON.stringify(settings), JSON.stringify(settingsSections), now(), organizationId);
2069
+ this.syncMarkdownAttachmentReferences(workId, "organization", organizationId, settingsMarkdownFromList(settings));
1915
2070
  if (memberIds) {
1916
2071
  this.replaceOrganizationMembers(organizationId, memberIds);
1917
2072
  this.recordMembershipVersions(memberSnapshots, "organization", organizationId, `组织“${name}”成员关系变更`);
@@ -1927,6 +2082,7 @@ export class Store {
1927
2082
  this.db.transaction(() => {
1928
2083
  this.assertExpectedVersion("organization", organizationId, expectedVersionNo, "组织");
1929
2084
  this.recordEntityVersion("organization", organizationId, "delete", null, "删除组织档案");
2085
+ this.clearMarkdownAttachmentReferences("organization", organizationId);
1930
2086
  this.db.run("DELETE FROM organizations WHERE id = ?", organizationId);
1931
2087
  this.recordMembershipVersions(memberSnapshots, "organization", organizationId, `组织“${String(current.name)}”已删除`);
1932
2088
  this.audit(String(current.workId), "organization.deleted", "organization", organizationId);
@@ -1948,15 +2104,19 @@ export class Store {
1948
2104
  const memberSnapshots = this.captureCharacterSnapshots(memberIds);
1949
2105
  const descriptionParts = [String(target.description).trim(), String(source.description).trim()].filter(Boolean);
1950
2106
  const description = [...new Set(descriptionParts)].join("\n\n");
1951
- const settings = [...new Set([...target.settings, ...source.settings])];
2107
+ const settingsSections = [...knowledgeSectionsFromStored(target.settingsSections, target.settings), ...knowledgeSectionsFromStored(source.settingsSections, source.settings)]
2108
+ .map((section, index) => ({ ...section, sortOrder: index }));
2109
+ const settings = settingsFromKnowledgeSections(settingsSections);
1952
2110
  const sourceMemberships = this.db.all("SELECT character_id, role, note, created_at FROM character_organization_memberships WHERE organization_id = ?", sourceOrganizationId);
1953
2111
  this.db.transaction(() => {
1954
2112
  this.recordEntityVersion("organization", sourceOrganizationId, "delete", mergeId, `合并至组织“${String(target.name)}”`, timestamp);
1955
- this.db.run("UPDATE organizations SET description = ?, settings_json = ?, updated_at = ? WHERE id = ?", description, JSON.stringify(settings), timestamp, targetOrganizationId);
2113
+ this.db.run("UPDATE organizations SET description = ?, settings_json = ?, settings_sections_json = ?, updated_at = ? WHERE id = ?", description, JSON.stringify(settings), JSON.stringify(settingsSections), timestamp, targetOrganizationId);
2114
+ this.syncMarkdownAttachmentReferences(workId, "organization", targetOrganizationId, settingsMarkdownFromList(settings));
1956
2115
  for (const membership of sourceMemberships) {
1957
2116
  this.db.run(`INSERT INTO character_organization_memberships (character_id, organization_id, role, note, created_at, updated_at)
1958
2117
  VALUES (?, ?, ?, ?, ?, ?) ON CONFLICT(character_id, organization_id) DO NOTHING`, requiredString(membership, "character_id"), targetOrganizationId, requiredString(membership, "role"), requiredString(membership, "note"), requiredString(membership, "created_at"), timestamp);
1959
2118
  }
2119
+ this.clearMarkdownAttachmentReferences("organization", sourceOrganizationId);
1960
2120
  this.db.run("DELETE FROM organizations WHERE id = ?", sourceOrganizationId);
1961
2121
  this.recordMembershipVersions(memberSnapshots, "organization", targetOrganizationId, `合并组织“${String(source.name)}”`);
1962
2122
  this.recordEntityVersion("organization", targetOrganizationId, "merge", mergeId, `合并组织“${String(source.name)}”`, timestamp);
@@ -1965,6 +2125,8 @@ export class Store {
1965
2125
  return { mergeId, target: this.getOrganization(targetOrganizationId), source };
1966
2126
  }
1967
2127
  mapOrganization(row) {
2128
+ const settingsSections = knowledgeSectionsFromStored(row.settings_sections_json, json(requiredString(row, "settings_json"), []));
2129
+ const settings = settingsFromKnowledgeSections(settingsSections);
1968
2130
  const members = this.db.all(`SELECT c.id, c.name, m.role, m.note
1969
2131
  FROM character_organization_memberships m
1970
2132
  JOIN characters c ON c.id = m.character_id
@@ -1979,7 +2141,9 @@ export class Store {
1979
2141
  workId: requiredString(row, "work_id"),
1980
2142
  name: requiredString(row, "name"),
1981
2143
  description: requiredString(row, "description"),
1982
- settings: json(requiredString(row, "settings_json"), []),
2144
+ settings,
2145
+ settingsMarkdown: settingsMarkdownFromList(settings),
2146
+ settingsSections,
1983
2147
  memberIds: members.map((member) => member.characterId),
1984
2148
  members,
1985
2149
  versionNo: this.currentEntityVersionNo("organization", requiredString(row, "id")),
@@ -2178,21 +2342,27 @@ export class Store {
2178
2342
  attachmentIdsInMarkdown(contentMarkdown) {
2179
2343
  return [...new Set([...contentMarkdown.matchAll(/attachment:\/\/([A-Za-z0-9_-]{1,300})/gu)].map((match) => String(match[1])))];
2180
2344
  }
2181
- syncCharacterProfileSectionAttachments(section) {
2182
- const sectionId = String(section.id);
2183
- const workId = String(section.workId);
2184
- const attachmentIds = this.attachmentIdsInMarkdown(String(section.contentMarkdown));
2345
+ syncMarkdownAttachmentReferences(workId, entityType, entityId, contentMarkdown) {
2346
+ const attachmentIds = this.attachmentIdsInMarkdown(contentMarkdown);
2185
2347
  for (const attachmentId of attachmentIds) {
2186
2348
  const attachment = this.getAttachment(attachmentId);
2187
2349
  if (attachment.workId !== workId)
2188
2350
  throw new AppError(400, "ATTACHMENT_WORK_MISMATCH", "附件不属于当前作品");
2189
2351
  }
2190
- this.db.run("DELETE FROM attachment_references WHERE entity_type = 'character-section' AND entity_id = ?", sectionId);
2352
+ this.db.run("DELETE FROM attachment_references WHERE entity_type = ? AND entity_id = ?", entityType, entityId);
2191
2353
  for (const attachmentId of attachmentIds) {
2192
2354
  this.db.run(`INSERT INTO attachment_references (attachment_id, work_id, entity_type, entity_id, created_at)
2193
- VALUES (?, ?, 'character-section', ?, ?)`, attachmentId, workId, sectionId, now());
2355
+ VALUES (?, ?, ?, ?, ?)`, attachmentId, workId, entityType, entityId, now());
2194
2356
  }
2195
2357
  }
2358
+ clearMarkdownAttachmentReferences(entityType, entityId) {
2359
+ this.db.run("DELETE FROM attachment_references WHERE entity_type = ? AND entity_id = ?", entityType, entityId);
2360
+ }
2361
+ syncCharacterProfileSectionAttachments(section) {
2362
+ const sectionId = String(section.id);
2363
+ const workId = String(section.workId);
2364
+ this.syncMarkdownAttachmentReferences(workId, "character-section", sectionId, String(section.contentMarkdown));
2365
+ }
2196
2366
  createCharacterProfileSection(characterId, input, source = "create", sourceRef = null) {
2197
2367
  const character = this.getCharacter(characterId);
2198
2368
  const sectionId = id("characterSection");
@@ -2386,7 +2556,7 @@ export class Store {
2386
2556
  const attachment = this.getAttachment(attachmentId);
2387
2557
  const references = Number(this.db.get("SELECT COUNT(*) AS count FROM attachment_references WHERE attachment_id = ?", attachmentId)?.count ?? 0);
2388
2558
  if (references > 0)
2389
- throw new AppError(409, "ATTACHMENT_IN_USE", "附件仍被人物档案章节引用,无法删除");
2559
+ throw new AppError(409, "ATTACHMENT_IN_USE", "附件仍被资料引用,无法删除");
2390
2560
  const storageKey = String(attachment.storageKey);
2391
2561
  this.db.transaction(() => {
2392
2562
  this.db.run("DELETE FROM attachments WHERE id = ?", attachmentId);
@@ -3438,14 +3608,28 @@ export class Store {
3438
3608
  }
3439
3609
  listTasks(workId) {
3440
3610
  this.getWork(workId);
3441
- return this.db.all("SELECT * FROM analysis_tasks WHERE work_id = ? ORDER BY created_at DESC", workId).map((row) => this.mapTask(row));
3611
+ return this.db.all("SELECT * FROM analysis_tasks WHERE work_id = ? ORDER BY created_at DESC, id DESC", workId).map((row) => this.mapTask(row));
3442
3612
  }
3443
3613
  listTasksPage(workId, pagination) {
3444
3614
  this.getWork(workId);
3445
3615
  const page = paginationSql(pagination);
3446
- const rows = this.db.all(`SELECT * FROM analysis_tasks WHERE work_id = ? ORDER BY created_at DESC${page.sql}`, workId, ...page.params);
3616
+ const rows = this.db.all(`SELECT * FROM analysis_tasks WHERE work_id = ? ORDER BY created_at DESC, id DESC${page.sql}`, workId, ...page.params);
3447
3617
  return paginated(rows.map((row) => this.mapTask(row)), pagination);
3448
3618
  }
3619
+ listTaskSummariesPage(workId, pagination) {
3620
+ this.getWork(workId);
3621
+ const page = paginationSql(pagination);
3622
+ const rows = this.db.all(`SELECT id, work_id, task_type, scope_json, status, progress, created_at, updated_at
3623
+ FROM analysis_tasks WHERE work_id = ? ORDER BY created_at DESC, id DESC${page.sql}`, workId, ...page.params);
3624
+ const chapterSummaries = new Map(this.db.all(`SELECT chapter.id, chapter.title, volume.title AS volume_title
3625
+ FROM chapters chapter JOIN volumes volume ON volume.id = chapter.volume_id
3626
+ WHERE chapter.work_id = ?`, workId).map((row) => [
3627
+ requiredString(row, "id"),
3628
+ `${requiredString(row, "volume_title")} · ${requiredString(row, "title")}`
3629
+ ]));
3630
+ const volumeTitles = new Map(this.db.all("SELECT id, title FROM volumes WHERE work_id = ?", workId).map((row) => [requiredString(row, "id"), requiredString(row, "title")]));
3631
+ return paginated(rows.map((row) => this.mapTaskSummary(row, chapterSummaries, volumeTitles)), pagination);
3632
+ }
3449
3633
  getTask(taskId) {
3450
3634
  const row = this.db.get("SELECT * FROM analysis_tasks WHERE id = ?", taskId);
3451
3635
  if (!row)
@@ -3535,6 +3719,31 @@ export class Store {
3535
3719
  updatedAt: requiredString(row, "updated_at")
3536
3720
  };
3537
3721
  }
3722
+ mapTaskSummary(row, chapterSummaries, volumeTitles) {
3723
+ const scope = json(requiredString(row, "scope_json"), {});
3724
+ return {
3725
+ id: requiredString(row, "id"),
3726
+ workId: requiredString(row, "work_id"),
3727
+ taskType: requiredString(row, "task_type"),
3728
+ scope,
3729
+ scopeSummary: this.taskScopeSummaryFromMaps(scope, chapterSummaries, volumeTitles),
3730
+ status: requiredString(row, "status"),
3731
+ progress: numberValue(row, "progress"),
3732
+ createdAt: requiredString(row, "created_at"),
3733
+ updatedAt: requiredString(row, "updated_at")
3734
+ };
3735
+ }
3736
+ taskScopeSummaryFromMaps(scope, chapterSummaries, volumeTitles) {
3737
+ if (typeof scope.chapterId === "string")
3738
+ return chapterSummaries.get(scope.chapterId) ?? "章节已删除";
3739
+ if (scope.type === "volume" && typeof scope.volumeId === "string") {
3740
+ const title = volumeTitles.get(scope.volumeId);
3741
+ return title ? `分卷 · ${title}` : "分卷已删除";
3742
+ }
3743
+ if (scope.type === "book" || Object.keys(scope).length === 0)
3744
+ return "全书";
3745
+ return "未指定范围";
3746
+ }
3538
3747
  taskScopeSummary(workId, scope) {
3539
3748
  if (typeof scope.chapterId === "string") {
3540
3749
  const chapter = this.db.get(`SELECT chapter.title AS title, volume.title AS volume_title