sillytavern 1.12.7 → 1.12.9

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 (175) hide show
  1. package/.editorconfig +1 -1
  2. package/.eslintrc.cjs +6 -15
  3. package/config.yaml +10 -0
  4. package/default/config.yaml +10 -0
  5. package/default/content/Char_Avatar_Comfy_Workflow.json +137 -0
  6. package/default/content/index.json +20 -0
  7. package/default/content/presets/context/Mistral V7.json +11 -0
  8. package/default/content/presets/context/Tulu.json +11 -0
  9. package/default/content/presets/instruct/Mistral V7.json +22 -0
  10. package/default/content/presets/instruct/Tulu.json +22 -0
  11. package/default/content/presets/openai/Default.json +0 -1
  12. package/default/content/settings.json +0 -1
  13. package/package.json +22 -2
  14. package/public/css/login.css +6 -0
  15. package/public/css/logprobs.css +8 -0
  16. package/public/css/promptmanager.css +1 -1
  17. package/public/css/scrollable-button.css +19 -0
  18. package/public/css/st-tailwind.css +0 -5
  19. package/public/css/toggle-dependent.css +2 -0
  20. package/public/global.d.ts +105 -1052
  21. package/public/img/nanogpt.svg +43 -0
  22. package/public/index.html +177 -135
  23. package/public/jsconfig.json +3 -13
  24. package/public/lib/epub.min.js +1 -1
  25. package/public/lib/pdf.min.mjs +21 -0
  26. package/public/lib/pdf.worker.min.mjs +21 -0
  27. package/public/lib.js +118 -0
  28. package/public/locales/ar-sa.json +0 -2
  29. package/public/locales/de-de.json +0 -2
  30. package/public/locales/es-es.json +0 -2
  31. package/public/locales/fr-fr.json +0 -2
  32. package/public/locales/is-is.json +0 -2
  33. package/public/locales/it-it.json +0 -2
  34. package/public/locales/ja-jp.json +0 -2
  35. package/public/locales/ko-kr.json +439 -258
  36. package/public/locales/nl-nl.json +0 -2
  37. package/public/locales/pt-pt.json +0 -2
  38. package/public/locales/ru-ru.json +91 -9
  39. package/public/locales/uk-ua.json +0 -2
  40. package/public/locales/vi-vn.json +0 -2
  41. package/public/locales/zh-cn.json +0 -2
  42. package/public/locales/zh-tw.json +0 -2
  43. package/public/script.js +279 -320
  44. package/public/scripts/PromptManager.js +2 -0
  45. package/public/scripts/RossAscends-mods.js +7 -8
  46. package/public/scripts/authors-note.js +98 -39
  47. package/public/scripts/backgrounds.js +2 -0
  48. package/public/scripts/bookmarks.js +2 -2
  49. package/public/scripts/bulk-edit.js +7 -7
  50. package/public/scripts/char-data.js +2 -1
  51. package/public/scripts/chat-templates.js +92 -0
  52. package/public/scripts/chats.js +1 -1
  53. package/public/scripts/extensions/assets/index.js +1 -0
  54. package/public/scripts/extensions/caption/settings.html +7 -0
  55. package/public/scripts/extensions/connection-manager/index.js +2 -0
  56. package/public/scripts/extensions/expressions/index.js +2 -0
  57. package/public/scripts/extensions/expressions/settings.html +1 -1
  58. package/public/scripts/extensions/quick-reply/src/QuickReply.js +1 -1
  59. package/public/scripts/extensions/quick-reply/src/SlashCommandHandler.js +28 -15
  60. package/public/scripts/extensions/quick-reply/src/ui/ctx/ContextMenu.js +20 -2
  61. package/public/scripts/extensions/quick-reply/src/ui/ctx/MenuHeader.js +1 -1
  62. package/public/scripts/extensions/quick-reply/src/ui/ctx/MenuItem.js +11 -7
  63. package/public/scripts/extensions/quick-reply/style.css +3 -0
  64. package/public/scripts/extensions/quick-reply/style.less +4 -0
  65. package/public/scripts/extensions/regex/dropdown.html +1 -1
  66. package/public/scripts/extensions/regex/editor.html +12 -8
  67. package/public/scripts/extensions/regex/engine.js +44 -2
  68. package/public/scripts/extensions/regex/index.js +6 -5
  69. package/public/scripts/extensions/stable-diffusion/comfyWorkflowEditor.html +1 -0
  70. package/public/scripts/extensions/stable-diffusion/index.js +256 -92
  71. package/public/scripts/extensions/stable-diffusion/settings.html +28 -2
  72. package/public/scripts/extensions/stable-diffusion/style.css +1 -1
  73. package/public/scripts/extensions/translate/index.js +38 -21
  74. package/public/scripts/extensions/tts/alltalk.js +1072 -840
  75. package/public/scripts/extensions/tts/index.js +3 -0
  76. package/public/scripts/extensions/tts/settings.html +14 -14
  77. package/public/scripts/extensions/tts/style.css +1 -1
  78. package/public/scripts/extensions/vectors/index.js +15 -5
  79. package/public/scripts/extensions.js +3 -1
  80. package/public/scripts/filters.js +45 -6
  81. package/public/scripts/group-chats.js +45 -31
  82. package/public/scripts/horde.js +8 -0
  83. package/public/scripts/i18n.js +2 -1
  84. package/public/scripts/instruct-mode.js +131 -44
  85. package/public/scripts/logprobs.js +132 -69
  86. package/public/scripts/macros.js +152 -102
  87. package/public/scripts/openai.js +124 -43
  88. package/public/scripts/personas.js +32 -31
  89. package/public/scripts/power-user.js +138 -110
  90. package/public/scripts/preset-manager.js +3 -0
  91. package/public/scripts/secrets.js +4 -0
  92. package/public/scripts/server-history.js +2 -2
  93. package/public/scripts/setting-search.js +2 -2
  94. package/public/scripts/slash-commands/SlashCommand.js +1 -0
  95. package/public/scripts/slash-commands/SlashCommandBrowser.js +6 -7
  96. package/public/scripts/slash-commands/SlashCommandParser.js +1 -0
  97. package/public/scripts/slash-commands/SlashCommandReturnHelper.js +1 -0
  98. package/public/scripts/slash-commands.js +160 -14
  99. package/public/scripts/st-context.js +171 -0
  100. package/public/scripts/stats.js +1 -0
  101. package/public/scripts/sysprompt.js +2 -0
  102. package/public/scripts/tags.js +6 -36
  103. package/public/scripts/templates/forbidMedia.html +2 -2
  104. package/public/scripts/templates/formatting.html +0 -2
  105. package/public/scripts/templates/itemizationChat.html +11 -2
  106. package/public/scripts/templates/itemizationText.html +11 -2
  107. package/public/scripts/templates/macros.html +4 -2
  108. package/public/scripts/templates/tagManagement.html +33 -0
  109. package/public/scripts/templates/welcome.html +1 -1
  110. package/public/scripts/templates.js +1 -0
  111. package/public/scripts/textgen-models.js +25 -11
  112. package/public/scripts/textgen-settings.js +37 -11
  113. package/public/scripts/tokenizers.js +22 -11
  114. package/public/scripts/tool-calling.js +22 -7
  115. package/public/scripts/util/showdown-patch.js +30 -0
  116. package/public/scripts/utils.js +16 -58
  117. package/public/scripts/variables.js +30 -75
  118. package/public/scripts/world-info.js +2 -0
  119. package/public/style.css +38 -27
  120. package/server.js +8 -1
  121. package/src/constants.js +1 -0
  122. package/src/endpoints/azure.js +1 -1
  123. package/src/endpoints/backends/chat-completions.js +44 -21
  124. package/src/endpoints/backends/text-completions.js +44 -9
  125. package/src/endpoints/caption.js +1 -1
  126. package/src/endpoints/characters.js +15 -3
  127. package/src/endpoints/chats.js +217 -23
  128. package/src/endpoints/classify.js +1 -1
  129. package/src/endpoints/search.js +4 -1
  130. package/src/endpoints/secrets.js +2 -0
  131. package/src/endpoints/speech.js +1 -1
  132. package/src/endpoints/stable-diffusion.js +232 -17
  133. package/src/endpoints/tokenizers.js +1 -1
  134. package/src/endpoints/translate.js +38 -3
  135. package/src/endpoints/users-public.js +8 -8
  136. package/src/middleware/webpack-serve.js +45 -0
  137. package/src/prompt-converters.js +139 -6
  138. package/src/{transformers.mjs → transformers.js} +2 -2
  139. package/src/users.js +5 -5
  140. package/src/util.js +182 -2
  141. package/src/vectors/embedding.js +1 -1
  142. package/tests/package-lock.json +3 -3
  143. package/webpack.config.js +35 -0
  144. package/public/lib/Readability-readerable.js +0 -108
  145. package/public/lib/Readability.js +0 -2314
  146. package/public/lib/bowser.min.js +0 -14
  147. package/public/lib/css-parser.map +0 -1
  148. package/public/lib/css-parser.mjs +0 -765
  149. package/public/lib/diff_match_patch.js +0 -55
  150. package/public/lib/droll.js +0 -108
  151. package/public/lib/fuse.js +0 -2240
  152. package/public/lib/handlebars.js +0 -5972
  153. package/public/lib/highlight.min.js +0 -1361
  154. package/public/lib/localforage.min.js +0 -7
  155. package/public/lib/moment-with-locales.min.js +0 -2
  156. package/public/lib/moment-with-locales.min.js.map +0 -1
  157. package/public/lib/pdf.mjs +0 -17398
  158. package/public/lib/pdf.mjs.map +0 -1
  159. package/public/lib/pdf.worker.mjs +0 -57124
  160. package/public/lib/pdf.worker.mjs.map +0 -1
  161. package/public/lib/popper.js +0 -2008
  162. package/public/lib/popper.js.map +0 -1
  163. package/public/lib/purify.min.js +0 -3
  164. package/public/lib/purify.min.js.map +0 -1
  165. package/public/lib/seedrandom.min.js +0 -1
  166. package/public/lib/showdown-katex.min.js +0 -36
  167. package/public/lib/showdown-katex.min.js.map +0 -1
  168. package/public/lib/showdown-patch.js +0 -24
  169. package/public/lib/showdown-toc.min.js +0 -1
  170. package/public/lib/showdown.min.js +0 -3
  171. package/public/lib/showdown.min.js.map +0 -1
  172. package/public/lib/svg-inject.js +0 -697
  173. package/public/lib/uniqolor.js +0 -303
  174. package/public/scripts/extensions/quick-reply/lib/morphdom-esm.js +0 -769
  175. package/public/scripts/extensions/quick-reply/lib/morphdom.LICENSE.txt +0 -21
package/.editorconfig CHANGED
@@ -5,7 +5,7 @@ end_of_line = lf
5
5
  insert_final_newline = true
6
6
  trim_trailing_whitespace = true
7
7
 
8
- [*.{js, conf, json, css, less, html}]
8
+ [*.{js,conf,json,css,less,html}]
9
9
  charset = utf-8
10
10
  indent_style = space
11
11
  indent_size = 4
package/.eslintrc.cjs CHANGED
@@ -19,6 +19,10 @@ module.exports = {
19
19
  parserOptions: {
20
20
  sourceType: 'module',
21
21
  },
22
+ globals: {
23
+ globalThis: 'readonly',
24
+ Deno: 'readonly',
25
+ },
22
26
  },
23
27
  {
24
28
  files: ['*.cjs'],
@@ -50,23 +54,10 @@ module.exports = {
50
54
  },
51
55
  // These scripts are loaded in HTML; tell ESLint not to complain about them being undefined
52
56
  globals: {
53
- DOMPurify: 'readonly',
54
- droll: 'readonly',
55
- Fuse: 'readonly',
56
- Handlebars: 'readonly',
57
- hljs: 'readonly',
58
- localforage: 'readonly',
59
- moment: 'readonly',
57
+ globalThis: 'readonly',
58
+ ePub: 'readonly',
60
59
  pdfjsLib: 'readonly',
61
- Popper: 'readonly',
62
- showdown: 'readonly',
63
- showdownKatex: 'readonly',
64
- SVGInject: 'readonly',
65
60
  toastr: 'readonly',
66
- Readability: 'readonly',
67
- isProbablyReaderable: 'readonly',
68
- ePub: 'readonly',
69
- diff_match_patch: 'readonly',
70
61
  SillyTavern: 'readonly',
71
62
  },
72
63
  },
package/config.yaml CHANGED
@@ -1,6 +1,8 @@
1
1
  # -- DATA CONFIGURATION --
2
2
  # Root directory for user data storage
3
3
  dataRoot: ./data
4
+ # The maximum amount of memory that parsed character cards can use in MB
5
+ cardsCacheCapacity: 100
4
6
  # -- SERVER CONFIGURATION --
5
7
  # Listen for incoming connections
6
8
  listen: false
@@ -168,5 +170,13 @@ claude:
168
170
  # (e.g {{random}} macro or lorebooks not as in-chat injections).
169
171
  # Otherwise, you'll just waste money on cache misses.
170
172
  enableSystemPromptCache: false
173
+ # Enables caching of the message history at depth (if supported).
174
+ # https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching
175
+ # -- IMPORTANT! --
176
+ # Use with caution. Behavior may be unpredictable and no guarantees can or will be made.
177
+ # Set to an integer to specify the desired depth. 0 (which does NOT include the prefill)
178
+ # should be ideal for most use cases.
179
+ # Any value other than a non-negative integer will be ignored and caching at depth will not be enabled.
180
+ cachingAtDepth: -1
171
181
  # -- SERVER PLUGIN CONFIGURATION --
172
182
  enableServerPlugins: false
@@ -1,6 +1,8 @@
1
1
  # -- DATA CONFIGURATION --
2
2
  # Root directory for user data storage
3
3
  dataRoot: ./data
4
+ # The maximum amount of memory that parsed character cards can use in MB
5
+ cardsCacheCapacity: 100
4
6
  # -- SERVER CONFIGURATION --
5
7
  # Listen for incoming connections
6
8
  listen: false
@@ -168,5 +170,13 @@ claude:
168
170
  # (e.g {{random}} macro or lorebooks not as in-chat injections).
169
171
  # Otherwise, you'll just waste money on cache misses.
170
172
  enableSystemPromptCache: false
173
+ # Enables caching of the message history at depth (if supported).
174
+ # https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching
175
+ # -- IMPORTANT! --
176
+ # Use with caution. Behavior may be unpredictable and no guarantees can or will be made.
177
+ # Set to an integer to specify the desired depth. 0 (which does NOT include the prefill)
178
+ # should be ideal for most use cases.
179
+ # Any value other than a non-negative integer will be ignored and caching at depth will not be enabled.
180
+ cachingAtDepth: -1
171
181
  # -- SERVER PLUGIN CONFIGURATION --
172
182
  enableServerPlugins: false
@@ -0,0 +1,137 @@
1
+ {
2
+ "3": {
3
+ "inputs": {
4
+ "seed": "%seed%",
5
+ "steps": "%steps%",
6
+ "cfg": "%scale%",
7
+ "sampler_name": "%sampler%",
8
+ "scheduler": "%scheduler%",
9
+ "denoise": "%denoise%",
10
+ "model": [
11
+ "4",
12
+ 0
13
+ ],
14
+ "positive": [
15
+ "6",
16
+ 0
17
+ ],
18
+ "negative": [
19
+ "7",
20
+ 0
21
+ ],
22
+ "latent_image": [
23
+ "12",
24
+ 0
25
+ ]
26
+ },
27
+ "class_type": "KSampler",
28
+ "_meta": {
29
+ "title": "KSampler"
30
+ }
31
+ },
32
+ "4": {
33
+ "inputs": {
34
+ "ckpt_name": "%model%"
35
+ },
36
+ "class_type": "CheckpointLoaderSimple",
37
+ "_meta": {
38
+ "title": "Load Checkpoint"
39
+ }
40
+ },
41
+ "6": {
42
+ "inputs": {
43
+ "text": "%prompt%",
44
+ "clip": [
45
+ "4",
46
+ 1
47
+ ]
48
+ },
49
+ "class_type": "CLIPTextEncode",
50
+ "_meta": {
51
+ "title": "CLIP Text Encode (Prompt)"
52
+ }
53
+ },
54
+ "7": {
55
+ "inputs": {
56
+ "text": "%negative_prompt%",
57
+ "clip": [
58
+ "4",
59
+ 1
60
+ ]
61
+ },
62
+ "class_type": "CLIPTextEncode",
63
+ "_meta": {
64
+ "title": "CLIP Text Encode (Negative Prompt)"
65
+ }
66
+ },
67
+ "8": {
68
+ "inputs": {
69
+ "samples": [
70
+ "3",
71
+ 0
72
+ ],
73
+ "vae": [
74
+ "4",
75
+ 2
76
+ ]
77
+ },
78
+ "class_type": "VAEDecode",
79
+ "_meta": {
80
+ "title": "VAE Decode"
81
+ }
82
+ },
83
+ "9": {
84
+ "inputs": {
85
+ "filename_prefix": "SillyTavern",
86
+ "images": [
87
+ "8",
88
+ 0
89
+ ]
90
+ },
91
+ "class_type": "SaveImage",
92
+ "_meta": {
93
+ "title": "Save Image"
94
+ }
95
+ },
96
+ "10": {
97
+ "inputs": {
98
+ "image": "%char_avatar%"
99
+ },
100
+ "class_type": "ETN_LoadImageBase64",
101
+ "_meta": {
102
+ "title": "Load Image (Base64) [https://github.com/Acly/comfyui-tooling-nodes]"
103
+ }
104
+ },
105
+ "12": {
106
+ "inputs": {
107
+ "pixels": [
108
+ "13",
109
+ 0
110
+ ],
111
+ "vae": [
112
+ "4",
113
+ 2
114
+ ]
115
+ },
116
+ "class_type": "VAEEncode",
117
+ "_meta": {
118
+ "title": "VAE Encode"
119
+ }
120
+ },
121
+ "13": {
122
+ "inputs": {
123
+ "upscale_method": "bicubic",
124
+ "width": "%width%",
125
+ "height": "%height%",
126
+ "crop": "center",
127
+ "image": [
128
+ "10",
129
+ 0
130
+ ]
131
+ },
132
+ "class_type": "ImageScale",
133
+ "_meta": {
134
+ "title": "Upscale Image"
135
+ }
136
+ }
137
+ }
@@ -135,6 +135,10 @@
135
135
  "filename": "Default_Comfy_Workflow.json",
136
136
  "type": "workflow"
137
137
  },
138
+ {
139
+ "filename": "Char_Avatar_Comfy_Workflow.json",
140
+ "type": "workflow"
141
+ },
138
142
  {
139
143
  "filename": "presets/kobold/Ace of Spades.json",
140
144
  "type": "kobold_preset"
@@ -623,6 +627,14 @@
623
627
  "filename": "presets/instruct/Synthia.json",
624
628
  "type": "instruct"
625
629
  },
630
+ {
631
+ "filename": "presets/instruct/Tulu.json",
632
+ "type": "instruct"
633
+ },
634
+ {
635
+ "filename": "presets/context/Tulu.json",
636
+ "type": "context"
637
+ },
626
638
  {
627
639
  "filename": "presets/instruct/Vicuna 1.0.json",
628
640
  "type": "instruct"
@@ -762,5 +774,13 @@
762
774
  {
763
775
  "filename": "presets/context/Mistral V3-Tekken.json",
764
776
  "type": "context"
777
+ },
778
+ {
779
+ "filename": "presets/instruct/Mistral V7.json",
780
+ "type": "instruct"
781
+ },
782
+ {
783
+ "filename": "presets/context/Mistral V7.json",
784
+ "type": "context"
765
785
  }
766
786
  ]
@@ -0,0 +1,11 @@
1
+ {
2
+ "story_string": "[SYSTEM_PROMPT] {{#if system}}{{system}}\n{{/if}}{{#if wiBefore}}{{wiBefore}}\n{{/if}}{{#if description}}{{description}}\n{{/if}}{{#if personality}}{{personality}}\n{{/if}}{{#if scenario}}{{scenario}}\n{{/if}}{{#if wiAfter}}{{wiAfter}}\n{{/if}}{{#if persona}}{{persona}}\n{{/if}}{{trim}}[/SYSTEM_PROMPT]",
3
+ "example_separator": "",
4
+ "chat_start": "",
5
+ "use_stop_strings": false,
6
+ "allow_jailbreak": false,
7
+ "always_force_name2": true,
8
+ "trim_sentences": false,
9
+ "single_line": false,
10
+ "name": "Mistral V7"
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "story_string": "<|system|>\n{{#if system}}{{system}}\n{{/if}}{{#if wiBefore}}{{wiBefore}}\n{{/if}}{{#if description}}{{description}}\n{{/if}}{{#if personality}}{{char}}'s personality: {{personality}}\n{{/if}}{{#if scenario}}Scenario: {{scenario}}\n{{/if}}{{#if wiAfter}}{{wiAfter}}\n{{/if}}{{#if persona}}{{persona}}\n{{/if}}{{trim}}\n",
3
+ "example_separator": "",
4
+ "chat_start": "",
5
+ "use_stop_strings": false,
6
+ "allow_jailbreak": false,
7
+ "always_force_name2": true,
8
+ "trim_sentences": false,
9
+ "single_line": false,
10
+ "name": "Tulu"
11
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "input_sequence": "[INST] ",
3
+ "output_sequence": " ",
4
+ "last_output_sequence": "",
5
+ "system_sequence": "[SYSTEM_PROMPT] ",
6
+ "stop_sequence": "</s>",
7
+ "wrap": false,
8
+ "macro": true,
9
+ "names_behavior": "always",
10
+ "activation_regex": "",
11
+ "system_sequence_prefix": "",
12
+ "system_sequence_suffix": "",
13
+ "first_output_sequence": "",
14
+ "skip_examples": false,
15
+ "output_suffix": "</s>",
16
+ "input_suffix": "[/INST]",
17
+ "system_suffix": "[/SYSTEM_PROMPT]",
18
+ "user_alignment_message": "",
19
+ "system_same_as_user": false,
20
+ "last_system_sequence": "",
21
+ "name": "Mistral V7"
22
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "input_sequence": "<|user|>\n",
3
+ "output_sequence": "<|assistant|>\n",
4
+ "first_output_sequence": "",
5
+ "last_output_sequence": "",
6
+ "system_sequence_prefix": "",
7
+ "system_sequence_suffix": "",
8
+ "stop_sequence": "<|end_of_text|>",
9
+ "wrap": false,
10
+ "macro": true,
11
+ "names_behavior": "always",
12
+ "activation_regex": "",
13
+ "skip_examples": false,
14
+ "output_suffix": "<|end_of_text|>\n",
15
+ "input_suffix": "\n",
16
+ "system_sequence": "<|system|>\n",
17
+ "system_suffix": "\n",
18
+ "user_alignment_message": "",
19
+ "last_system_sequence": "",
20
+ "system_same_as_user": false,
21
+ "name": "Tulu"
22
+ }
@@ -230,7 +230,6 @@
230
230
  "show_external_models": false,
231
231
  "assistant_prefill": "",
232
232
  "assistant_impersonation": "",
233
- "human_sysprompt_message": "Let's get started. Please generate your response based on the information and instructions provided above.",
234
233
  "claude_use_sysprompt": false,
235
234
  "use_alt_scale": false,
236
235
  "squash_system_messages": false,
@@ -133,7 +133,6 @@
133
133
  "auto_fix_generated_markdown": false,
134
134
  "send_on_enter": 0,
135
135
  "console_log_prompts": false,
136
- "render_formulas": false,
137
136
  "allow_name1_display": false,
138
137
  "allow_name2_display": false,
139
138
  "hotswap_enabled": true,
package/package.json CHANGED
@@ -1,28 +1,43 @@
1
1
  {
2
2
  "dependencies": {
3
+ "@adobe/css-tools": "^4.4.0",
3
4
  "@agnai/sentencepiece-js": "^1.1.1",
4
5
  "@agnai/web-tokenizers": "^0.1.3",
6
+ "@iconfu/svg-inject": "^1.2.3",
7
+ "@mozilla/readability": "^0.5.0",
8
+ "@popperjs/core": "^2.11.8",
5
9
  "@zeldafan0225/ai_horde": "^5.1.0",
6
10
  "archiver": "^7.0.1",
7
11
  "bing-translate-api": "^2.9.1",
8
12
  "body-parser": "^1.20.2",
13
+ "bowser": "^2.11.0",
9
14
  "command-exists": "^1.2.9",
10
15
  "compression": "^1",
11
16
  "cookie-parser": "^1.4.6",
12
17
  "cookie-session": "^2.1.0",
13
18
  "cors": "^2.8.5",
14
19
  "csrf-csrf": "^2.2.3",
20
+ "diff-match-patch": "^1.0.5",
21
+ "dompurify": "^3.1.7",
22
+ "droll": "^0.2.1",
15
23
  "express": "^4.21.0",
16
24
  "form-data": "^4.0.0",
25
+ "fuse.js": "^7.0.0",
26
+ "google-translate-api-browser": "^3.0.1",
17
27
  "google-translate-api-x": "^10.7.1",
28
+ "handlebars": "^4.7.8",
18
29
  "helmet": "^7.1.0",
30
+ "highlight.js": "^11.10.0",
19
31
  "html-entities": "^2.5.2",
20
32
  "iconv-lite": "^0.6.3",
21
33
  "ip-matching": "^2.1.2",
22
34
  "ipaddr.js": "^2.0.1",
23
35
  "jimp": "^0.22.10",
36
+ "localforage": "^1.10.0",
24
37
  "lodash": "^4.17.21",
25
38
  "mime-types": "^2.1.35",
39
+ "moment": "^2.30.1",
40
+ "morphdom": "^2.7.4",
26
41
  "multer": "^1.4.5-lts.1",
27
42
  "node-fetch": "^3.3.2",
28
43
  "node-persist": "^4.0.1",
@@ -34,11 +49,14 @@
34
49
  "rate-limiter-flexible": "^5.0.0",
35
50
  "response-time": "^2.3.2",
36
51
  "sanitize-filename": "^1.6.3",
52
+ "seedrandom": "^3.0.5",
53
+ "showdown": "^2.1.0",
37
54
  "sillytavern-transformers": "2.14.6",
38
55
  "simple-git": "^3.19.1",
39
56
  "tiktoken": "^1.0.16",
40
57
  "vectra": "^0.2.2",
41
58
  "wavefile": "^11.0.0",
59
+ "webpack": "^5.95.0",
42
60
  "write-file-atomic": "^5.0.1",
43
61
  "ws": "^8.17.1",
44
62
  "yaml": "^2.3.4",
@@ -66,9 +84,11 @@
66
84
  "type": "git",
67
85
  "url": "https://github.com/SillyTavern/SillyTavern.git"
68
86
  },
69
- "version": "1.12.7",
87
+ "version": "1.12.9",
70
88
  "scripts": {
71
89
  "start": "node server.js",
90
+ "start:deno": "deno run --allow-run --allow-net --allow-read --allow-write --allow-sys --allow-env server.js",
91
+ "start:bun": "bun server.js",
72
92
  "start:no-csrf": "node server.js --disableCsrf",
73
93
  "postinstall": "node post-install.js",
74
94
  "lint": "eslint \"src/**/*.js\" \"public/**/*.js\" ./*.js",
@@ -91,7 +111,7 @@
91
111
  "@types/cookie-parser": "^1.4.7",
92
112
  "@types/cookie-session": "^2.0.49",
93
113
  "@types/cors": "^2.8.17",
94
- "@types/dompurify": "^3.0.5",
114
+ "@types/deno": "^2.0.0",
95
115
  "@types/express": "^4.17.21",
96
116
  "@types/jquery": "^3.5.29",
97
117
  "@types/lodash": "^4.17.10",
@@ -42,3 +42,9 @@ body.login .userSelect .userHandle {
42
42
  body.login .userSelect:hover {
43
43
  background-color: var(--black30a);
44
44
  }
45
+
46
+ body.login #handleEntryBlock,
47
+ body.login #passwordEntryBlock,
48
+ body.login #passwordRecoveryBlock {
49
+ margin: 2px;
50
+ }
@@ -72,6 +72,14 @@
72
72
  opacity: 0.5;
73
73
  }
74
74
 
75
+ .logprobs_output_prefix:hover {
76
+ background-color: rgba(255, 0, 50, 0.4);
77
+ }
78
+
79
+ .logprobs_output_prefix:hover ~ .logprobs_output_prefix {
80
+ background-color: rgba(255, 0, 50, 0.4);
81
+ }
82
+
75
83
  .logprobs_candidate_list {
76
84
  grid-row-start: 3;
77
85
  grid-row-end: 4;
@@ -333,7 +333,7 @@
333
333
  }
334
334
 
335
335
  .completion_prompt_manager_popup_entry_form_control:has(#completion_prompt_manager_popup_entry_form_prompt:disabled)>div:first-child::after {
336
- content: 'The content of this prompt is pulled from elsewhere and cannot be edited here.';
336
+ content: attr(external_piece_text);
337
337
  display: block;
338
338
  width: 100%;
339
339
  font-weight: 600;
@@ -0,0 +1,19 @@
1
+ .scrollable-buttons-container {
2
+ max-height: 50vh; /* Use viewport height instead of fixed pixels */
3
+ overflow-y: auto;
4
+ -webkit-overflow-scrolling: touch; /* Momentum scrolling on iOS */
5
+ margin-top: 1rem; /* m-t-1 is equivalent to margin-top: 1rem; */
6
+ flex-shrink: 1;
7
+ min-height: 0;
8
+ scrollbar-width: thin;
9
+ scrollbar-color: rgba(255, 255, 255, 0.3) transparent;
10
+ }
11
+
12
+ .scrollable-buttons-container::-webkit-scrollbar {
13
+ width: 6px;
14
+ }
15
+
16
+ .scrollable-buttons-container::-webkit-scrollbar-thumb {
17
+ background-color: rgba(255, 255, 255, 0.3);
18
+ border-radius: 3px;
19
+ }
@@ -479,11 +479,6 @@
479
479
  line-height: 1.2;
480
480
  }
481
481
 
482
- .custom-katex-html,
483
- .katex-html {
484
- display: none;
485
- }
486
-
487
482
  .hoverglow {
488
483
  transition: opacity 200ms;
489
484
  }
@@ -474,6 +474,8 @@ label[for="trim_spaces"]:has(input:checked) i.warning {
474
474
 
475
475
  #claude_function_prefill_warning {
476
476
  display: none;
477
+ color: red;
478
+ font-weight: bold;
477
479
  }
478
480
 
479
481
  #openai_settings:has(#openai_function_calling:checked):has(#claude_assistant_prefill:not(:placeholder-shown), #claude_assistant_impersonation:not(:placeholder-shown)) #claude_function_prefill_warning {