{
  "type": "script",
  "enabled": false,
  "name": "DE-passivecheck",
  "id": "ac51d80b-f358-41be-a920-60f7ef156a80",
  "content": "if (!window.renriCleanEmpty) {\n    window.renriCleanEmpty = function(html) {\n        return html\n            .replace(/<p>\\s*(<br\\s*\\/?>)?\\s*<\\/p>/gi, '')\n            .replace(/^(\\s*<br\\s*\\/?>)+/gi, '')\n            .replace(/(\\s*<br\\s*\\/?>)+$/gi, '')\n            .replace(/(<br\\s*\\/?>\\s*){3,}/gi, '<br>');\n    };\n}\n(function() {\n    var $ = window.jQuery;\n    var SKILL_COLORS = {\n        'LOGIC':{clr:'#4A9EFF',rgb:'74,158,255'},'ENCYCLOPEDIA':{clr:'#4A9EFF',rgb:'74,158,255'},\n        'RHETORIC':{clr:'#4A9EFF',rgb:'74,158,255'},'DRAMA':{clr:'#4A9EFF',rgb:'74,158,255'},\n        'CONCEPTUALIZATION':{clr:'#4A9EFF',rgb:'74,158,255'},'VISUAL CALCULUS':{clr:'#4A9EFF',rgb:'74,158,255'},\n        'VOLITION':{clr:'#9D5CD0',rgb:'157,92,208'},'INLAND EMPIRE':{clr:'#9D5CD0',rgb:'157,92,208'},\n        'EMPATHY':{clr:'#9D5CD0',rgb:'157,92,208'},'AUTHORITY':{clr:'#9D5CD0',rgb:'157,92,208'},\n        'ESPRIT DE CORPS':{clr:'#9D5CD0',rgb:'157,92,208'},\n        'ENDURANCE':{clr:'#FF6B9D',rgb:'255,107,157'},'PAIN THRESHOLD':{clr:'#FF6B9D',rgb:'255,107,157'},\n        'PHYSICAL INSTRUMENT':{clr:'#FF6B9D',rgb:'255,107,157'},'ELECTROCHEMISTRY':{clr:'#FF6B9D',rgb:'255,107,157'},\n        'SHIVERS':{clr:'#FF6B9D',rgb:'255,107,157'},'HALF LIGHT':{clr:'#FF6B9D',rgb:'255,107,157'},\n        'HAND/EYE COORDINATION':{clr:'#F4C542',rgb:'244,197,66'},'PERCEPTION':{clr:'#F4C542',rgb:'244,197,66'},\n        'REACTION SPEED':{clr:'#F4C542',rgb:'244,197,66'},'SAVOIR FAIRE':{clr:'#F4C542',rgb:'244,197,66'},\n        'INTERFACING':{clr:'#F4C542',rgb:'244,197,66'},'COMPOSURE':{clr:'#F4C542',rgb:'244,197,66'}\n    };\n    var DIFF_MAP = {\n        'trivial':1,'easy':2,'medium':3,'challenging':4,'formidable':5,'legendary':6,'heroic':7,'godly':8,'impossible':9\n    };\n    var MOD = {\n        promptId: 'renri_skill_system',\n        systemPrompt: 'In your responses, a SKILL block may appear naturally within the text \\u2014 place it exactly where it fits the narrative, not at the end. It is a mechanic showing the character\\'s internal monologue or passive skill check, inspired by Disco Elysium.\\n\\nOnly one SKILL per response. Insert it inline where it naturally belongs.\\n\\nFormat (on its own line, surrounded by blank lines):\\n[SKL: SKILLNAME | Difficulty: Trivial/Easy/Medium/Challenging/Formidable/Legendary/Heroic/Godly/Impossible | commentary]\\n\\nRules:\\n- Difficulty levels ONLY: Trivial, Easy, Medium, Challenging, Formidable, Legendary, Heroic, Godly, Impossible\\n- SKILLNAME and Difficulty are ALWAYS in English, regardless of narrative language\\n- Commentary is in the language of the narrative\\n- Don\\'t be too wordy; aim for 20\\u201350 words in the commentary\\n- Never use quotation marks of any kind in the commentary \\u2014 they break parsing\\n- Only one SKILL can be active at a time\\n\\nSkills:\\nINTELLECT: LOGIC, ENCYCLOPEDIA, RHETORIC, DRAMA, CONCEPTUALIZATION, VISUAL CALCULUS\\nPSYCHE: VOLITION, INLAND EMPIRE, EMPATHY, AUTHORITY, ESPRIT DE CORPS\\nPHYSIQUE: ENDURANCE, PAIN THRESHOLD, PHYSICAL INSTRUMENT, ELECTROCHEMISTRY, SHIVERS, HALF LIGHT\\nMOTORICS: HAND/EYE COORDINATION, PERCEPTION, REACTION SPEED, SAVOIR FAIRE, INTERFACING, COMPOSURE',\n        updatePrompt: '[System Note: Include one [SKL: SKILLNAME | Difficulty: Trivial/Easy/Medium/Challenging/Formidable/Legendary/Heroic/Godly/Impossible | commentary] block inline where it fits. SKILLNAME and Difficulty always in English, commentary in narrative language. 20\\u201350 words. No quotation marks in commentary.]',\n        cssId: 'renri-skill-de-styles',\n        blockRegex: /\\[SKL:\\s*([^|]+?)\\s*\\|\\s*(?:Difficulty:\\s*)?([^|]+?)\\s*\\|\\s*([^\\]]+?)\\s*\\]/gi,\n        expirationDepth: 7\n    };\n    var TH = null, _rendering = {};\n    function esc(s){ return (s||'').replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'); }\n    function getColor(name){ return SKILL_COLORS[(name||'').toUpperCase().trim()]||{clr:'#4A9EFF',rgb:'74,158,255'}; }\n    function buildPips(diffStr){\n        var filled=DIFF_MAP[(diffStr||'').toLowerCase().trim()]||1, html='';\n        for (var i=1;i<=9;i++) html+='<div class=\"skl-pip'+(i<=filled?' filled':'')+'\"></div>';\n        return html;\n    }\n    function buildCard(skillName,difficulty,commentary){\n        var c=getColor(skillName);\n        return '<div class=\"skl-block-wrap\">' +\n            '<div class=\"skl-block\" style=\"--clr:'+c.clr+';--clr-rgb:'+c.rgb+'\">' +\n            '<div class=\"skl-brush-1\"></div><div class=\"skl-brush-2\"></div><div class=\"skl-brush-3\"></div>' +\n            '<div class=\"skl-inner\">' +\n            '<div class=\"skl-header\">' +\n            '<span class=\"skl-name\">'+esc(skillName)+'</span>' +\n            '<span class=\"skl-dot\"></span>' +\n            '<span class=\"skl-diff\">'+esc(difficulty)+'</span>' +\n            '<div class=\"skl-pips\">'+buildPips(difficulty)+'</div>' +\n            '</div>' +\n            '<div class=\"skl-rule\"></div>' +\n            '<div class=\"skl-text\">'+esc(commentary)+'</div>' +\n            '</div></div></div>';\n    }\n    function getLastState(){\n        var lastId=TH.getLastMessageId();\n        if (lastId<1) return null;\n        var msgs=TH.getChatMessages('0-'+(lastId-1));\n        if (!msgs) return null;\n        for (var i=msgs.length-1;i>=0;i--) if (msgs[i].message&&/\\[SKL:/i.test(msgs[i].message)) return true;\n        return null;\n    }\n    function injectPrompt(ls){\n        var content=ls?MOD.updatePrompt:MOD.systemPrompt;\n        TH.injectPrompts([{id:MOD.promptId,position:'in_chat',depth:0,role:'system',content:content,should_scan:false}],{once:true});\n    }\n    function renderVisual(messageId){\n        if (!TH||_rendering[messageId]) return;\n        _rendering[messageId]=true;\n        setTimeout(function(){ delete _rendering[messageId]; },800);\n        var msgs=TH.getChatMessages(messageId);\n        if (!msgs||!msgs.length||!msgs[0].message) return;\n        MOD.blockRegex.lastIndex=0;\n        if (!MOD.blockRegex.test(msgs[0].message)) return;\n        var $mes=TH.retrieveDisplayedMessage(messageId);\n        if (!$mes||!$mes.length) return;\n        var $target=$mes.find('.mes_text').length?$mes.find('.mes_text'):$mes;\n        var isExpired=(TH.getLastMessageId()-messageId)>=MOD.expirationDepth;\n        $target.find('.skl-block-wrap').remove();\n        if (isExpired) {\n            $target.find('p,div,li').each(function(){\n                var $el=$(this);\n                if ($el.closest('.skl-block-wrap').length) return;\n                if (/\\[SKL:/i.test($el.text())) { var h=$el.html(); if(h) $el.html(h.replace(/\\[SKL:[^\\]]*\\]/gi,'')); }\n            });\n            return;\n        }\n        $target.find('p,div,li').each(function(){\n            var $el=$(this);\n            if ($el.closest('.skl-block-wrap').length) return;\n            if (!/\\[SKL:/i.test($el.text())) return;\n            var html=$el.html();\n            MOD.blockRegex.lastIndex=0;\n            var newHtml=html.replace(/\\[SKL:\\s*([^|]+?)\\s*\\|\\s*(?:Difficulty:\\s*)?([^|]+?)\\s*\\|\\s*([^\\]]+?)\\s*\\]/gi,\n                function(match,name,diff,commentary){\n                    return buildCard(name.trim(),diff.trim(),commentary.trim());\n                });\n            if (newHtml!==html) $el.html(newHtml);\n        });\n        var finalHtml=$target.html();\n        if (finalHtml&&window.renriCleanEmpty) $target.html(window.renriCleanEmpty(finalHtml));\n    }\n    function init(){\n        if (!window.TavernHelper||!window.tavern_events||typeof window.eventOn!=='function') { setTimeout(init,200); return; }\n        TH=window.TavernHelper;\n        var ev=window.tavern_events;\n        if (!$('#'+MOD.cssId).length) $('head').append('<style id=\"'+MOD.cssId+'\">'+MOD.css+'</style>');\n        window.eventOn(ev.CHARACTER_MESSAGE_RENDERED,renderVisual);\n        window.eventOn(ev.USER_MESSAGE_RENDERED,renderVisual);\n        window.eventOn(ev.MESSAGE_EDITED,  function(id){ setTimeout(function(){ renderVisual(id); },100); });\n        window.eventOn(ev.MESSAGE_UPDATED, function(id){ setTimeout(function(){ renderVisual(id); },100); });\n        window.eventOn(ev.MESSAGE_SWIPED,  function(id){ setTimeout(function(){ renderVisual(id); },100); });\n        var scan=function(){ $('.mes').each(function(){ var id=$(this).attr('mesid'); if(id) renderVisual(Number(id)); }); };\n        scan();\n        window.eventOn(ev.CHAT_CHANGED,            function(){ setTimeout(scan,500); });\n        window.eventOn(ev.MORE_MESSAGES_LOADED,    scan);\n        window.eventOn(ev.GENERATION_AFTER_COMMANDS, function(){ injectPrompt(getLastState()); });\n        window.eventOn(ev.GENERATION_ENDED,   function(){ setTimeout(function(){ var $l=$('.mes').last(); var id=$l.attr('mesid'); if(id) renderVisual(Number(id)); },400); });\n        window.eventOn(ev.GENERATION_STOPPED, function(){ setTimeout(function(){ var $l=$('.mes').last(); var id=$l.attr('mesid'); if(id) renderVisual(Number(id)); },400); });\n        console.log('[RenriSkill:DE] init OK \\u2014 the skills are listening');\n    }\n    MOD.css = \"@import url('https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,700;0,900;1,700&family=IM+Fell+English:ital@0;1&family=JetBrains+Mono:wght@400;500;600&display=swap');\\n.skl-block-wrap{position:relative;padding-left:0;margin:8px 0}\\n.skl-block{--clr:#4A9EFF;--clr-rgb:74,158,255;position:relative;padding:13px 16px 13px 16px;animation:skl-in 0.5s cubic-bezier(0.16,1,0.3,1) both}\\n.skl-block::before{content:'';position:absolute;inset:-2px -4px -4px -2px;background:rgba(var(--clr-rgb),0.10);clip-path:polygon(0% 12%,0.5% 3%,3% 0%,30% 1%,61% 0%,89% 1%,99% 0%,100% 8%,99% 25%,100% 55%,98% 80%,100% 93%,97% 100%,68% 99%,35% 100%,7% 99%,1% 100%,0% 92%,1% 62%,0% 38%,1% 20%);z-index:0}\\n.skl-block::after{content:'';position:absolute;inset:1px 3px -6px 4px;background:rgba(var(--clr-rgb),0.045);clip-path:polygon(1% 18%,0% 5%,4% 0%,42% 2%,77% 0%,96% 2%,100% 9%,99% 32%,100% 60%,98% 84%,99% 96%,93% 100%,52% 98%,18% 100%,2% 97%,0% 86%,2% 50%,0% 28%);z-index:0}\\n.skl-inner{position:relative;z-index:1;display:flex;flex-direction:column;gap:7px}\\n.skl-header{display:flex;align-items:center;gap:10px;flex-wrap:wrap}\\n.skl-name{font-family:'JetBrains Mono',monospace;font-size:11px;font-weight:600;color:var(--clr);letter-spacing:0.12em;text-transform:uppercase;line-height:1}\\n.skl-dot{width:2px;height:2px;background:rgba(var(--clr-rgb),0.4);border-radius:50%;flex-shrink:0}\\n.skl-diff{font-family:'IM Fell English',Georgia,serif;font-size:10px;font-style:italic;color:rgba(var(--clr-rgb),0.65);letter-spacing:0.04em;line-height:1}\\n.skl-pips{display:flex;align-items:center;gap:3px;margin-left:auto}\\n.skl-pip{width:5px;height:5px;border:1px solid rgba(var(--clr-rgb),0.3);transform:rotate(45deg)}\\n.skl-pip.filled{background:var(--clr);border-color:var(--clr);opacity:0.75}\\n.skl-rule{height:1px;background:linear-gradient(to right,rgba(var(--clr-rgb),0.3),rgba(var(--clr-rgb),0.08) 60%,transparent)}\\n.skl-text{font-family:'IM Fell English',Georgia,serif;font-size:12.5px;font-style:italic;color:rgba(215,220,228,0.85);line-height:1.55}\\n@keyframes skl-in{from{opacity:0;transform:translateY(5px) scale(0.99)}to{opacity:1;transform:translateY(0) scale(1)}}\";\n    $(document).ready(init);\n})();",
  "info": "Skill DE",
  "button": {
    "enabled": false,
    "buttons": []
  },
  "data": {}
}