# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [ ] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [ ] Have you added type definitions?
# Description
Novel AI V4 Vibe 기능 추가
SelectInput에 number도 입력되도록 추가(Svelte의 select가 알아서 number string 변환해준다길래
타입만 추가함)
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [x] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [x] Have you added type definitions?
# Description
This PR adds read-only lore books access from Lua.
- `getLoreBooks(triggerId, search)`: Gets all lore books of the name
(comment). No additional sorting is done - API user will need to sort
themselves. All lores are parsed before returning.
- `loadLoreBooks(triggerId, reserve)`: Retrieves all active lore books
in current context. This function takes account of max context length
and cut low priority lores, similar to a user submitting their message.
All lores are parsed before returning.
- Specifying `reserve` higher than `0` would reserve that much tokens
for other prompts.
With `loadLoreBooks()`, character and module creators would be able to
separate token- and context-heavy data generations into Lua and separate
LLM workflow for improved accuracy.
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [ ] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [ ] Have you added type definitions?
# Preview

# Description
This PR adds preset support for the HypaV3 memory system.
Users can now create different presets as needed and switch between
presets.
It also supports parallel requests in an experimental implementation.
As it's still in the experimental stage, feedback is requested.
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [x] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [x] Have you added type definitions?
# Description
This PR adds read-only persona name and description access from Lua by
adding `getPersonaName(triggerId)` and
`getPersonaDescription(triggerId)`. The description is parsed before
returning.
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [x] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [x] Have you added type definitions?
# Description
## What does this PR do?
This PR adds an optional feature to store prompt preset metadata in each
chat message.
<img width="311" alt="prompt"
src="https://github.com/user-attachments/assets/2591ac25-6cb2-41fc-85b2-e12c35b79370"
/>
---
## Why is this useful?
When writing prompts, it's common to test **dozens of prompt presets**
across many messages. After just a day or two, it's hard to remember
which message used which prompt.
This is especially important for sensitive models, where even small
changes to prompt wording or toggle combinations can greatly affect
output.
---
## What is stored when enabled?
To support this, an option has been added to **Advanced Settings** that
stores:
- Prompt preset name (*Add Prompt Info to Chat*)
- Active custom toggles (*Add Prompt Info to Chat*)
- Prompt text (*Add Prompt *Text* To Chat*):
Only the **Prompt Template** portion of the final prompt (**as sent**)
is stored — character description, persona, lorebook, and long-term
memory are excluded to avoid excessive size.
This option is separated due to its potential impact on storage.
This information is stored per message, if the feature is enabled.
<img width="319" alt="setting"
src="https://github.com/user-attachments/assets/00600d0c-d38d-46cf-890f-3f08d78ccb0a"
/>
---
## Implementation Summary
### `src/ts/storage/database.svelte.ts`
- Added `interface MessagePresetInfo` (includes `promptName`,
`promptToggles`, `promptText`)
- Updated `interface Message` with optional `promptInfo`
### `src/ts/process/index.svelte.ts`
- In `sendChat()`, prompt metadata is collected and stored
- `promptText` is taken from the existing `formated` array, but only
after filtering out types like `'persona'`, `'description'`,
`'authornote'`, `'memory'`
- Since `formated` is reused, this had to be placed in the **later**
part of the `sendChat` function.
- However, `promptName` and `promptToggles` are collected **early** to
avoid mismatches caused by user changes during message sending. *(A
short comment has been added to explain the code separation. See
screenshot below.)*
<img width="494" alt="comment"
src="https://github.com/user-attachments/assets/b43da333-d529-4b3c-b659-579b847135a5"
/>
- Used this condition when storing partial prompt data (As you can see,
these are the types that support Custom Inner Format.):
```ts
// only for types supporting Custom Inner Format
if (DBState.db.promptInfoInsideChat && DBState.db.promptTextInfoInsideChat) {
pushPromptInfoBody('supaMemory', card.innerFormat)
}
```
- The final `promptInfo` is added to the message object during
`message.push`
---
## Additional Notes
- The prompt preset name and active toggles take up very little space,
so they are unlikely to be an issue.
- The prompt text may increase the message size slightly, but:
- Modern models already generate outputs of several thousand tokens, so
adding \~2,000 tokens of metadata is relatively minor in comparison.
- The `{{slot}}` contents are not included in the saved text.
- The prompt text is filtered through `risuChatParser`, which reduces
unnecessary parts before saving.
- Most importantly, this feature is optional and can be enabled only by
those who need it — for example, prompt creators or advanced users.
---
## Final Thoughts
This feature is designed to help prompt creators **track, debug, and
revisit** messages more easily.
If this feature doesn't fit the project goals or introduces any
concerns, feel free to let me know or suggest changes.
It might also be interesting to allow users to write a note for each
message!
Thanks for reading.
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [x] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [x] Have you added type definitions?
# Description
Currently, you can:
- Manually rewrite summaries
- Delete orphaned summaries (all or none, in the settings)
- Delete all summaries after one
But you can't:
- Manually add summaries
- Delete a summary
This PR aims to add a feature for the second one - you can pick and
delete a specific summary.
As I'm not yet familiar with the implementation of HypaV3, this PR only
allows deleting orphaned summaries to minimize any unforeseen
side-effects.
cn, de, es, vi, zh-Hant strings were made with Gemini. Reviews welcome.
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [ ] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [ ] Have you added type definitions?
# Description
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [ ] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [ ] Have you added type definitions?
# Description
Filled data field when creating a recursive lorebook.
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [ ] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [ ] Have you added type definitions?
# Description
Prevented lazy loading of blocks when no chat is selected.
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [ ] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [x] Have you added type definitions?
# Description
This PR aims to make the alertSelect trigger usable in Lua as well.
Here is the Lua code used for testing:
```Lua
testSelect = async(function(id)
-- declare string table
local strTable = {
"test1",
"test2",
"test3",
"test4",
"test5",
}
local testVar = alertSelect(id, strTable):await()
print('testVar')
print(testVar)
end)
```
Updated `SelectInput` and `OptionInput` to allow `value` as `string | number`. Extended image generation configurations with new features, including `cfg_rescale`, `noise_schedule`, and vibe data handling. Improved the setup for reference images and added support for mnemonist dependency in the package manager.
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [ ] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions? -
I've checked web version only.
- [x] Have you added type definitions?
# Description
Added the ability to configure the `cfg_rescale` and `noise_schedule`
properties in the NovelAI settings.
# Example

# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [ ] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [ ] Have you added type definitions?
# Preview


# Description
This PR introduces following:
- feat: add accessibility setting to control visibility of Hypa V2/V3
modal button in chat menu
- feat: add summarization condition tip to HypaV3 modal
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [ ] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [ ] Have you added type definitions?
# Description
In some ComfyUI workflows, output.images is often undefined when
intermediate outputs from text-based nodes are included and cannot be
suppressed in the response.
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [ ] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [x] Have you added type definitions?
# Description
This PR adds sorting, import, and export functionality to the Module
Lorebook list.
I focused on preserving the existing code structure as much as possible
while implementing these changes.
Thank you for your time and review!
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [ ] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [ ] Have you added type definitions?
# Description
Previous PR #805 had a bug due to incorrect flow of if statements. I
apologize for this.
In this PR, I have improved the flow of if statement additionally from
the modification I made before.
Please refer [Fix: Correct tokenize flow in tokenizer encode
function](09228f3f86)
To see the how I changed the flow.
The biggest change of this commit is that it resolves the issue of
duplicate tokenization that was occurring
By add a `Line 122: if (result === undefined) {`
I think this change corrected the error even if people didn't turn on
the caching option.
And there is an error in the tikJS function, independent of this wrong
flow.
https://github.com/dqbd/tiktoken/issues/35
# PR Checklist
- [ ] Have you checked if it works normally in all models? *Ignore this
if it doesn't use models.*
- [ ] Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- [x] Have you added type definitions?
# Description
This PR introduces the persona sorting feature.
**Changes:**
1. Uses the `sortable` library, consistent with other sorting
functionalities.
2. To prevent desynchronization between the selected persona and the UI
value during sorting:
* `OnStart`: Saves the currently selected persona.
* `OnEnd`: Switches selection to the first persona without saving the
initial selection.
I believe I've tested this sufficiently, but please feel free to point
out any potential issues or edge cases I might have missed.
Thank you for your time and review!
# PR Checklist
- ❌ Have you checked if it works normally in all models? *Ignore this if
it doesn't use models.*
- Not applicable
- ✅ Have you checked if it works normally in all web, local, and node
hosted versions? If it doesn't, have you blocked it in those versions?
- Done
- ❌ Have you added type definitions?
- Not applicable
# Description
In the previous commit, a new proxy endpoint was added to the backend to
resolve CORS errors that occurred when the frontend directly fetched
data from Risu Realm.
However, 403 errors were occurring because the POST requests sent from
the loadRisuAccountData() function in the frontend were not being
properly processed.
Additionally, the backend was inefficiently handling complex body
processing.
The updated backend code now provides a more efficient and stable
solution by directly piping the original request.
Furthermore, an issue where UserSettings.svelte couldn't handle tokens
received through the backend proxy after successfully logging into a
Risu account has also been fixed.
# PR Checklist
- [x] Have you added type definitions?
# Description
This PR aims to address the following issues:
* Fixed problems where prefixes and suffixes in the Lorebook prompt were
affecting keyword matching logic.
1. In full word matching, the first and last words of the body text
would consistently fail to match.
2. In general matching, using a persona name as a keyword would always
result in a match, regardless of context.
* I tried to preserve the original code structure as much as possible
while implementing these fixes. Please feel free to suggest changes to
the approach if you see a better way.
Thank you for your time and review.