From 9773dc48a985915dcf48386aadbd029681b98abb Mon Sep 17 00:00:00 2001 From: bangonicdd <157843588+bangonicdd2@users.noreply.github.com> Date: Sat, 15 Feb 2025 00:41:15 +0900 Subject: [PATCH 1/6] fix: adjust pipelineness in prev PR for easing further managing --- src/ts/process/modules.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/ts/process/modules.ts b/src/ts/process/modules.ts index 73a9b80d..8b870f6e 100644 --- a/src/ts/process/modules.ts +++ b/src/ts/process/modules.ts @@ -268,7 +268,10 @@ function getModuleByIds(ids:string[]){ modules.push(module) } } - return deduplicateModuleById(modules) + if(db.moduleIntergration){ + modules = deduplicateModuleById(modules) + } + return modules } function deduplicateModuleById(modules:RisuModule[]){ From 7c3563679e776c7c5b78bbcf7bdfa64bfb89b23a Mon Sep 17 00:00:00 2001 From: bangonicdd <157843588+bangonicdd2@users.noreply.github.com> Date: Sun, 16 Feb 2025 03:56:15 +0900 Subject: [PATCH 2/6] fix: make asset names case-insensitive --- src/ts/parser.svelte.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ts/parser.svelte.ts b/src/ts/parser.svelte.ts index 87f46090..1cc5b002 100644 --- a/src/ts/parser.svelte.ts +++ b/src/ts/parser.svelte.ts @@ -303,11 +303,11 @@ async function replaceAsync(string, regexp, replacerFunction) { } async function getAssetSrc(assetArr: string[][], name: string, assetPaths: {[key: string]:{path: string, ext?: string}}) { - name = name.toLocaleLowerCase() + const lowerName = name.toLocaleLowerCase() for (const asset of assetArr) { - if (trimmer(asset[0].toLocaleLowerCase()) !== trimmer(name)) continue + if (trimmer(asset[0].toLocaleLowerCase()) !== trimmer(lowerName)) continue const assetPath = await getFileSrc(asset[1]) - assetPaths[asset[0].toLocaleLowerCase()] = { + assetPaths[name] = { path: assetPath, ext: asset[2] } From 825507fcaf25c851f4ed1c0995a57b9eadd3ef45 Mon Sep 17 00:00:00 2001 From: Kwaroran Date: Sun, 16 Feb 2025 15:08:14 +0900 Subject: [PATCH 3/6] Add V1 option and warning --- src/lang/en.ts | 2 ++ src/lang/ko.ts | 2 ++ src/lib/Setting/Pages/AdvancedSettings.svelte | 3 +++ src/lib/SideBars/Scripts/TriggerList.svelte | 18 ++++++++++-------- src/ts/storage/database.svelte.ts | 1 + 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/lang/en.ts b/src/lang/en.ts index f91d8099..88574fbd 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -1044,4 +1044,6 @@ export const languageEnglish = { emptySelectedFirstMessageLabel: "WARN: Selected first message is empty", }, bulkEnabling: "Lorebook Bulk Enabling", + showDeprecatedTriggerV1: "Show Deprecated Trigger V1", + triggerV1Warning: "Trigger V1 is deprecated. it might be removed in the future.", } diff --git a/src/lang/ko.ts b/src/lang/ko.ts index f7642e9c..f2527ff1 100644 --- a/src/lang/ko.ts +++ b/src/lang/ko.ts @@ -966,4 +966,6 @@ export const languageKorean = { "emptySelectedFirstMessageLabel": "경고: 선택된 첫 메시지가 비어있습니다" }, "bulkEnabling": "한번에 로어북 활성화 버튼", + "showDeprecatedTriggerV1": "비권장 트리거 V1 보이기", + "triggerV1Warning": "트리거 V1은 비권장입니다. 추후에 제거될 수 있습니다.", } diff --git a/src/lib/Setting/Pages/AdvancedSettings.svelte b/src/lib/Setting/Pages/AdvancedSettings.svelte index d92579b8..9ce9ec75 100644 --- a/src/lib/Setting/Pages/AdvancedSettings.svelte +++ b/src/lib/Setting/Pages/AdvancedSettings.svelte @@ -214,6 +214,9 @@
+
+ +
{/if} diff --git a/src/lib/SideBars/Scripts/TriggerList.svelte b/src/lib/SideBars/Scripts/TriggerList.svelte index 8348472c..8d3b8abb 100644 --- a/src/lib/SideBars/Scripts/TriggerList.svelte +++ b/src/lib/SideBars/Scripts/TriggerList.svelte @@ -13,6 +13,7 @@ import { hubURL } from "src/ts/characterCards"; import { PlusIcon } from "lucide-svelte"; import TriggerV2List from "./TriggerList2.svelte"; + import { DBState } from "src/ts/stores.svelte"; interface Props { value?: triggerscript[]; lowLevelAble?: boolean; @@ -22,6 +23,7 @@ let stb: Sortable = null let ele: HTMLDivElement = $state() let sorted = $state(0) + let v1Enabled = $derived(value?.[0]?.effect?.[0]?.type !== 'triggercode' && value?.[0]?.effect?.[0]?.type !== 'triggerlua' && value?.[0]?.effect?.[0]?.type !== 'v2Header') let opened = 0 const createStb = () => { if (!ele) { @@ -77,17 +79,14 @@
- {#if value?.[0]?.effect?.[0]?.type !== 'triggercode' && value?.[0]?.effect?.[0]?.type !== 'triggerlua' && value?.[0]?.effect?.[0]?.type !== 'v2Header' } -
+{#if v1Enabled} + {language.triggerV1Warning} +{/if} {#if value?.[0]?.effect?.[0]?.type === 'triggerlua'} + {/if} + + {#if (selectedEffectIndex !== -1 && value[selectedIndex].effect[selectedEffectIndex].type !== 'v2EndIndent') || selectMode === 0} + + {/if} + + + + {#if (selectedEffectIndex !== -1 && value[selectedIndex].effect[selectedEffectIndex].type !== 'v2EndIndent') || selectMode === 0} + + {/if} + + {/if} +
{#if menuMode === 0}
@@ -882,7 +1090,17 @@ @@ -906,7 +1124,10 @@
-
+
{ + selectMode = 1 + selectedEffectIndex = -1 + }}>
{language.name} { @@ -938,38 +1159,34 @@
{#each value[selectedIndex].effect as effect, i} - {#if effect.type === 'v2EndIndent'} - - {:else} - - {/if} + {/if} + {/each} @@ -1019,27 +1243,56 @@ {language.var} - {:else if editTrigger.type === 'v2If'} + {:else if editTrigger.type === 'v2If' || editTrigger.type === 'v2IfAdvanced'} {language.varName} + {#if editTrigger.type === 'v2IfAdvanced'} + + {language.value} + {language.var} + + {/if} {language.condition} - + { + if(e.currentTarget.value === '≡'){ + const trg = editTrigger as triggerV2IfAdvanced + trg.condition = '≡' + trg.target = 'true' + trg.targetType = 'value' + } + }}> = {">"} {"<"} {"≥"} {"≤"} + {#if editTrigger.type === 'v2IfAdvanced'} + + + + + + + {/if} {language.value} - - {language.value} - {language.var} - - + {#if editTrigger.condition === '≡'} + + true + false + null + + {:else} + + {language.value} + {language.var} + + + {/if} {:else if editTrigger.type === 'v2RunTrigger'} @@ -1633,6 +1886,31 @@ {:else if editTrigger.type === 'v2GetRequestStateLength'} {language.outputVar} + {:else if editTrigger.type === 'v2QuickSearchChat'} + {language.value} + + {language.value} + {language.var} + + + + {language.condition} + + loose + strict + regex + + + {language.depth} + + {language.value} + {language.var} + + + + {language.outputVar} + + {:else} {language.noConfig} {/if} @@ -1641,7 +1919,7 @@ if(selectedEffectIndex === -1){ value[selectedIndex].effect.push(editTrigger) - if(editTrigger.type === 'v2If' || editTrigger.type === 'v2Loop' || editTrigger.type === 'v2Else' || editTrigger.type === 'v2LoopNTimes'){ + if(editTrigger.type === 'v2If' || editTrigger.type === 'v2IfAdvanced' || editTrigger.type === 'v2Loop' || editTrigger.type === 'v2Else' || editTrigger.type === 'v2LoopNTimes'){ value[selectedIndex].effect.push({ type: 'v2EndIndent', indent: editTrigger.indent + 1, @@ -1662,7 +1940,7 @@ } else if(menuMode === 2){ editTrigger.indent = (value[selectedIndex].effect[selectedEffectIndex] as triggerEffectV2).indent - if(editTrigger.type === 'v2If' || editTrigger.type === 'v2Loop' || editTrigger.type === 'v2LoopNTimes' || editTrigger.type === 'v2Else'){ + if(editTrigger.type === 'v2If' || editTrigger.type === 'v2IfAdvanced' || editTrigger.type === 'v2Loop' || editTrigger.type === 'v2LoopNTimes' || editTrigger.type === 'v2Else'){ if(addElse){ value[selectedIndex].effect.splice(selectedEffectIndex, 0, { type: 'v2Else', diff --git a/src/ts/process/triggers.ts b/src/ts/process/triggers.ts index fff25062..14f314b5 100644 --- a/src/ts/process/triggers.ts +++ b/src/ts/process/triggers.ts @@ -38,7 +38,8 @@ export type triggerEffectV2 = triggerV2Header|triggerV2IfVar|triggerV2Else|tri triggerV2PushArrayVar|triggerV2PopArrayVar|triggerV2ShiftArrayVar|triggerV2UnshiftArrayVar|triggerV2SpliceArrayVar|triggerV2GetFirstMessage| triggerV2SliceArrayVar|triggerV2GetIndexOfValueInArrayVar|triggerV2RemoveIndexFromArrayVar|triggerV2ConcatString|triggerV2GetLastUserMessage| triggerV2GetLastCharMessage|triggerV2GetAlertInput|triggerV2GetDisplayState|triggerV2SetDisplayState|triggerV2UpdateGUI|triggerV2Wait| - triggerV2GetRequestState|triggerV2SetRequestState|triggerV2GetRequestStateRole|triggerV2SetRequestStateRole|triggerV2GetReuqestStateLength + triggerV2GetRequestState|triggerV2SetRequestState|triggerV2GetRequestStateRole|triggerV2SetRequestStateRole|triggerV2GetReuqestStateLength|triggerV2IfAdvanced| + triggerV2QuickSearchChat|triggerV2StopPromptSending export type triggerConditionsVar = { type:'var'|'value' @@ -173,7 +174,7 @@ export type triggerV2Header = { export type triggerV2IfVar = { type: 'v2If', - condition: '='|'!='|'>'|'<'|'>='|'<='|'null'|'true'|'false', + condition: '='|'!='|'>'|'<'|'>='|'<=', targetType: 'var'|'value', target: string, source: string, @@ -678,9 +679,36 @@ export type triggerV2Wait = { indent: number } +export type triggerV2IfAdvanced = { + type: 'v2IfAdvanced', + condition: '='|'!='|'>'|'<'|'>='|'<='|'≒'|'∋'|'∈'|'∌'|'∉'|'≡' + targetType: 'var'|'value', + target: string, + sourceType: 'var'|'value', + source: string, + indent: number +} + +export type triggerV2QuickSearchChat = { + type: 'v2QuickSearchChat', + value: string, + valueType: 'var'|'value', + condition: 'loose'|'strict'|'regex', + depth: string, + depthType: 'var'|'value', + outputVar: string, + indent: number +} + +export type triggerV2StopPromptSending = { + type: 'v2StopPromptSending', + indent: number +} + const safeSubset = [ 'v2SetVar', 'v2If', + 'v2IfAdvanced', 'v2Else', 'v2EndIndent', 'v2LoopNTimes', @@ -1169,8 +1197,9 @@ export async function runTrigger(char:character,mode:triggerMode, arg:{ setVar(varKey, resultValue) break } - case 'v2If':{ - const sourceValue = getVar(risuChatParser(effect.source,{chara:char})) + case 'v2If': + case 'v2IfAdvanced':{ + const sourceValue = (effect.type === 'v2If' || effect.sourceType === 'var') ? getVar(risuChatParser(effect.source,{chara:char})) : risuChatParser(effect.source,{chara:char}) const targetValue = effect.targetType === 'value' ? risuChatParser(effect.target,{chara:char}) : getVar(risuChatParser(effect.target,{chara:char})) let pass = false switch(effect.condition){ @@ -1208,6 +1237,60 @@ export async function runTrigger(char:character,mode:triggerMode, arg:{ pass = Number(sourceValue) <= Number(targetValue) break } + case '∈':{ + try { + pass = JSON.parse(targetValue).includes(sourceValue) + } catch (error) { + pass = false + } + break + } + case '∋':{ + try { + pass = JSON.parse(sourceValue).includes(targetValue) + } catch (error) { + pass = false + } + break + } + case '∉':{ + try { + pass = !JSON.parse(targetValue).includes(sourceValue) + } catch (error) { + pass = true + } + break + } + case '∌':{ + try { + pass = !JSON.parse(sourceValue).includes(targetValue) + } catch (error) { + pass = true + } + break + } + case '≒':{ + const num1 = Number(sourceValue) + const num2 = Number(targetValue) + if(Number.isNaN(num1) || Number.isNaN(num2)){ + pass = sourceValue.toLocaleLowerCase().replace(/ /g,'') === targetValue.toLocaleLowerCase().replace(/ /g,'') + } + else{ + pass = Math.abs(num1 - num2) < 0.0001 + } + break + } + case '≡':{ + if(targetValue === 'true'){ + pass = sourceValue === 'true' || sourceValue === '1' + } + else if(targetValue === 'false'){ + pass = !(sourceValue === 'true' || sourceValue === '1') + } + else{ + pass = sourceValue === targetValue + } + } } @@ -1814,6 +1897,29 @@ export async function runTrigger(char:character,mode:triggerMode, arg:{ setVar(effect.outputVar, json.length.toString()) break } + case 'v2QuickSearchChat':{ + const value = effect.valueType === 'value' ? risuChatParser(effect.value,{chara:char}) : getVar(risuChatParser(effect.value,{chara:char})) + const depth = effect.depthType === 'value' ? Number(risuChatParser(effect.depth,{chara:char})) : Number(getVar(risuChatParser(effect.depth,{chara:char}))) + const condition = effect.condition + + if(isNaN(depth)){ + setVar(effect.outputVar, '0') + break + } + let pass = false + let da = chat.message.slice(0-depth).map((v)=>v.data).join(' ') + if(condition === 'strict'){ + pass = da.split(' ').includes(value) + } + else if(condition === 'loose'){ + pass = da.toLowerCase().includes(value.toLowerCase()) + } + else if(condition === 'regex'){ + pass = new RegExp(value).test(da) + } + setVar(effect.outputVar, pass ? '1' : '0') + break + } } } } From 616d247dcae3e7b4073f8be8a3f22894221143a1 Mon Sep 17 00:00:00 2001 From: Kwaroran Date: Sun, 16 Feb 2025 19:14:21 +0900 Subject: [PATCH 6/6] bump: update application version to 150.2.0 --- src-tauri/tauri.conf.json | 2 +- src/ts/storage/database.svelte.ts | 2 +- version.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 156a3af7..5b5503bb 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -29,7 +29,7 @@ }, "productName": "RisuAI", "mainBinaryName": "RisuAI", - "version": "150.1.0", + "version": "150.2.0", "identifier": "co.aiclient.risu", "plugins": { "updater": { diff --git a/src/ts/storage/database.svelte.ts b/src/ts/storage/database.svelte.ts index d55873fe..7a500ce0 100644 --- a/src/ts/storage/database.svelte.ts +++ b/src/ts/storage/database.svelte.ts @@ -12,7 +12,7 @@ import { defaultColorScheme, type ColorScheme } from '../gui/colorscheme'; import type { PromptItem, PromptSettings } from '../process/prompt'; import type { OobaChatCompletionRequestParams } from '../model/ooba'; -export let appVer = "150.1.0" +export let appVer = "150.2.0" export let webAppSubVer = '' diff --git a/version.json b/version.json index f906a9a4..571d9169 100644 --- a/version.json +++ b/version.json @@ -1 +1 @@ -{"version":"150.1.0"} \ No newline at end of file +{"version":"150.2.0"} \ No newline at end of file