-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTM.auto.min.js
1 lines (1 loc) · 116 KB
/
TM.auto.min.js
1
Object.assign(MineTm,{appNameShort:"🌶️",appNameLong:"Peppercore",reloadCurrentChatFromIdbeAsync:async()=>{if(!MineTm.getCurrentChatId())return!1;const e=await MineTm.hideSidebarTemporarilyAsync();return Mine.qs('[data-element-id="workspace-tab-settings"]').click(),await Mine.getAnimationFrameAsync(),Mine.qs('[data-element-id="workspace-tab-chat"]').click(),await Mine.getAnimationFrameAsync(),(await MineTm.getSidebarToggleEleAsync()).click(),e(),!0},goToLastRecentChatAsync:async()=>{if(MineTm.getAllChatMsgEles().length)return;const e=await(async()=>{let e=null,t=0;return(async(e,t="keyval-store",n="keyval")=>new Promise(((a,o)=>{const s=indexedDB.open(t);s.onerror=e=>o(`IndexedDB error: ${e.target.error}`),s.onsuccess=t=>{const s=t.target.result.transaction([n],"readonly").objectStore(n).openCursor();s.onerror=e=>o(`Cursor error: ${e.target.error}`),s.onsuccess=t=>{const n=t.target.result;return n?e(n.value,n.key)?a(n.value):void n.continue():a(null)}}})))(((n,a)=>{if(a.startsWith("CHAT_")&&n?.messages?.length){const a=n.messages[n.messages.length-1];if(!a)return;const o=new Date(a.createdAt).getTime();o>t&&(t=o,e=n)}return null})).then((()=>e))})();if(!e)return Mine.toastWarning("No latest chat found");Mine.dim(document.body);const t=new URL(window.location);t.search="",t.hash=`#chat=${e.chatID}`,window.history.replaceState({},"",t.toString()),await Mine.getAnimationFrameAsync(),window.location.reload()},activateGuestMode:()=>{Mine.hideQs("#navbar"),Mine.hideQs(".hide-when-print"),Mine.hideQs('[placeholder="Search"]'),Mine.isi("#chat-input-textbox {border: 1px solid lightpink;}")},favoriteCurrentChatAsync:async()=>{const e=(await MineTm.getCurChatIdbMetaAsync()).idbe;return e.favoritedAt||(e.favoritedAt=(new Date).toISOString(),await MineTm.setChatIndexedDbValueAsync(MineTm.getCurrentChatId(),e)),!0},startChatWithAgentFromHomeAsync:async e=>{(await MineTm.Mine.waitFor((()=>MineTm.Mine.qsaa("div:has(>button)").find((t=>t.innerText.toLowerCase()===e.toLowerCase()))))).click(),await MineTm.Mine.waitForQs('[data-element-id="current-character"]')},getAnimationFrameAsync:async()=>new Promise((e=>requestAnimationFrame(e))),getMinePluginBasedSecretAsync:(()=>{let e=null;return async(t,n=!1)=>{if(t){if(!e||n){const t=localStorage.TM_useUserPluginSettings;let n={};try{n=JSON.parse(t)}catch(e){}e=n?.mineSecrets||{}}return e[t]}}})(),setPluginsStateAsync:async(e=!0,t,{desiredMaybePluginNames:n=["Personal Finance","Javascript Runner","Search Google","Text Me","Scrape website"]}={})=>{const a=await t.waitForQs('[data-element-id="current-chat-title"] button:has([d="M10.75 1H14.25C15.767 1 17 2.233 17 3.75V7.25C17 7.664 16.664 8 16.25 8H10.75C10.336 8 10 7.664 10 7.25V1.75C10 1.336 10.336 1 10.75 1Z"])');t.simulateClick(a),await t.waitForQs('[data-element-id="current-chat-title"] [role="menuitem"]'),await MineTm.getAnimationFrameAsync();const o='[data-element-id="current-chat-title"] [role="menuitem"]';await t.waitFor((()=>t.qs(o)?.innerText.trim().length));const s=t.qsaa(o),i=s[0]?.closest("[role=menu]");i&&(i.style.display="none"),s.filter((e=>n.some((t=>e.innerText.toLowerCase().includes(t.toLowerCase()))))).forEach((t=>{const n=t.querySelector("button"),a="true"===n.getAttribute("aria-checked")?.toLowerCase();(a&&!e||!a&&e)&&n.click()})),await MineTm.getAnimationFrameAsync(),t.simulateClick(a),await MineTm.getAnimationFrameAsync()},getChatIndexedDbValueAsync:async e=>await Mine.getIndexedDbValue(`CHAT_${e}`,"keyval-store","keyval"),setChatIndexedDbValueAsync:async(e,t)=>await Mine.setIndexedDbValue(`CHAT_${e}`,t,"keyval-store","keyval"),deleteChatIndexedDbValueAsync:async e=>await Mine.deleteIndexedDbValueAsync(`CHAT_${e}`,"keyval-store","keyval"),getCurrentChatId:()=>{const e=window.location.hash.match(/chat=([^&]+)/);return e?e[1]:null},sendMessageAsync:async(e,{append:t=!1}={})=>{const n=await MineTm.getTaAsync(),a=n.value,o=n.value.trimEnd();let s=o;!!n.closest(".editing")||(s=t?`${o?`${o}\n\n`:""}${e}`:e),Mine.updateReactTypableFormValue(n,s),(await MineTm.getSendButtonAsync()).click(),a&&!t&&Mine.updateReactTypableFormValue(n,a)},getSendButtonAsync:async()=>await Mine.waitForQs('[data-element-id="send-button"]'),waitForCompletedMsgCountAsync:(e,t=2e4)=>Promise.race([new Promise((t=>{const n=a=>{a.detail.numMsgs>=e&&(document.removeEventListener("numMsgsInChatChanged",n),t(a.detail))};document.addEventListener("numMsgsInChatChanged",n)})),new Promise(((e,n)=>setTimeout((()=>n(new Error("Timeout"))),t)))]),getAllChatMsgEles:()=>Mine.qsaa('[data-element-id="ai-response"],[data-element-id="user-message"]'),getIsAiResponding:()=>!!Mine.qs('[data-element-id="response-block"]:not(:has([id^="message-timestamp-"]))'),getTaAsync:async()=>await Mine.waitForQs("#chat-input-textbox"),getStopButton:()=>Mine.qsaa("button").find((e=>"Stop"===e.innerText)),isEventModifierFree:e=>!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey),maybeClickStopButtonAsync:async()=>{const e=MineTm.getStopButton();e&&(e.click(),await Mine.sleep(100))},clickStopButtonAsync:async()=>{const e=await Mine.waitFor(MineTm.getStopButton);e&&(e.click(),await Mine.sleep(100))},getAllResponseBlocks:()=>Mine.qsaa('[data-element-id="response-block"]'),getAllResponseBlocksLength:()=>document.querySelectorAll('[data-element-id="response-block"]').length,deleteRespBlockAsync:async e=>{const t=MineTm.getAllResponseBlocks().length;e.querySelector('[id^="headlessui-menu-button-:"]').click();const n=await Mine.waitFor((()=>[...e.querySelectorAll("button")].find((e=>"Delete"===e.innerText))));n.click(),await Mine.waitFor((()=>"Sure?"===n.innerText),{timeoutMs:1e3}).catch((e=>null)),n?.click(),await Mine.waitFor((()=>MineTm.getAllResponseBlocks().length<t))},actionFromResponseBlockMenu:async(e,t)=>{e.querySelector('[id^="headlessui-menu-button-:"]').click(),(await Mine.waitFor((()=>Mine.qsaa("button",e).find((e=>t(e)))))).click()},forkResponseBlockAsync:async e=>{const t=MineTm.getCurrentChatId(),n=(await MineTm.getChatIndexedDbValueAsync(t)).messages.length;await MineTm.actionFromResponseBlockMenu(e,(e=>e.innerText.trim().toLowerCase()==="Fork chat from here".toLowerCase())),await Mine.waitFor((()=>{const e=MineTm.getCurrentChatId();if(e?.trim())return e!==t}));const a=MineTm.getCurrentChatId();return await Mine.waitFor((async()=>(await MineTm.getChatIndexedDbValueAsync(a))?.messages?.length===n)),!0},goToChatIdWithHardReload:(e,t=!1)=>{const n=`chat=${e}`;return!(!t&&window.location.hash==="#"+n||(window.location.hash=n,window.location.reload(),0))},togglePinResponseBlockAsync:async e=>{const t=async()=>(await MineTm.getCurChatIdbMetaAsync()).idbe.messages.filter((e=>e.isPinned)).length,n=await t();return await MineTm.actionFromResponseBlockMenu(e,(e=>["Pin","Unpin"].includes(e.innerText))),await Mine.waitFor((async()=>n!==await t())),await t()>n},deleteLastExchangeAsync:async({enableScrolling:e=!0}={})=>{await MineTm.maybeClickStopButtonAsync();const t=MineTm.getAllResponseBlocks(),n=t.findLastIndex((e=>!!e.querySelector('[data-element-id="user-message"]')));if(n<0)return;const a=t.slice(n).reverse();if(a.length>4&&Mine.toast("Only removing max 4 for safety."),a.forEach((e=>{e.style.transition="opacity 200ms ease-out",e.style.opacity="0"})),e){const e=t[n-1];e&&(e.scrollIntoView({behavior:"smooth"}),await Mine.sleep(500))}for(let e=0;e<a.length;e++){const t=a[e];await MineTm.deleteRespBlockAsync(t)}if(a.some((e=>e.isConnected)))return Mine.toastError("Error removing messages. Consider reloading page");(await MineTm.getTaAsync()).focus()},getCurChatIdbMetaAsync:async()=>{const e=MineTm.getCurrentChatId();if(!e)return null;const t=await MineTm.getChatIndexedDbValueAsync(e);return{contextSize:t.chatParams.contextLimit,idbe:t}},copyCurrentChatToServerAsync:async()=>{const e=await MineTm.getMinePluginBasedSecretAsync("tmChatBufferPassword");if(!e)return Mine.toastWarning("Buffer password not found");try{const t=await MineTm.getChatIndexedDbValueAsync(MineTm.getCurrentChatId());if(!t)return Mine.toastWarning("No chat data found");const n=JSON.stringify(t),a=await fetch("https://pepperpotts.fly.dev/tm/upload-chat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({chat:n,apiKey:e})}),{isSuccess:o,message:s}=await a.json();return o?MineTm.Mine.toastSuccess(s):Mine.toastError(`${s}`),o}catch(e){return Mine.toastError("Failed to upload chat."),!1}},renameChatAsync:async(e,t)=>{const n=await MineTm.getChatIndexedDbValueAsync(e);if(!n)throw"not found in db";n.chatTitle=t,await MineTm.setChatIndexedDbValueAsync(e,n)},scrollToLastMsgAsync:async(e=!1)=>{const t=MineTm.getAllResponseBlocks().slice(-1*(e?2:1))[0];if(!t)return;const n=t?.closest('[class*="message-index-"]');n.scrollIntoView({behavior:"smooth"}),await Mine.sleep(500)},getChatEngagedDurationLabel:e=>{const t=((e,t=30)=>{if(e.length<2)return 0;const n=60*t*1e3,a=e.sort(((e,t)=>e-t));let o=0;for(let e=1;e<a.length;e++){const t=a[e]-a[e-1];o+=t<n?t:0}return o})(e?.messages.map((e=>new Date(e.createdAt)))||[]);return MineTm.formatDurationLabel(t)},formatDurationLabel:e=>{const t=Math.floor(e/1e3),n=Math.floor(t/60),a=Math.floor(n/60),o=Math.floor(a/24),s=t%60,i=n%60,r=a%24,c=[];return o&&c.push(`${o}d`),r&&c.push(`${r}h`),!o&&i&&c.push(`${i}m`),!o&&!r&&i<10&&c.push(`${s}s`),c.join("")},getSidebarToggleEleAsync:async()=>await Mine.waitForQs('button[aria-label="Open sidebar"]')}),(async()=>{if(!window.Mine){const e=()=>{const e={click:t=>e.qs(t)?e.qs(t).click():null,clickLast:t=>{const n=e.qsaa(t);return!!n.length&&(n[n.length-1].click(),!0)},autoLogin:()=>{const t=e.qsaa("input[type=password]").filter((e=>!!e.offsetParent));if(1!==t.length)return;const n=t[0];n.value.length>3&&n?.closest("form")?.querySelector("[type=submit]")?.click()},updateReactTypableFormValue:(e,t)=>{const n={INPUT:"HTMLInputElement",TEXTAREA:"HTMLTextAreaElement",SELECT:"HTMLSelectElement"};if(e.tagName in n){Object.getOwnPropertyDescriptor(window[n[e.tagName]].prototype,"value").set.call(e,t);{const n="numeric"===e.inputMode||"number"===e.type?new InputEvent("input",{bubbles:!0,cancelable:!0,inputType:"insertFromPaste",data:t}):"SELECT"===e.tagName?new Event("input",{bubbles:!0,cancelable:!0}):new InputEvent("input",{bubbles:!0,cancelable:!0,inputType:"insertText",data:t});e.dispatchEvent(n),e.dispatchEvent(new Event("change",{bubbles:!0,cancelable:!0}))}}},Utils:{allLetterCombinations:(e,t=[])=>{if("number"!=typeof e)throw Error("numLetters must be a number");if(e<0)throw Error("numLetters must be greater than or equal to zero");if(0===e)return[];const n="abcdefghijklmnopqrstuvwxyz".split(""),a=e=>n.map((t=>e+t)),o=(e,t=n,s=1)=>e==s?t:o(e,(e=>e.map(a).reduce(((e,t)=>e.concat(t)),[]))(t),s+1);return o(e).filter((e=>!t.length||t.includes(e[0])))},findGalleries:()=>e.qsaa("span,div").filter((e=>{const t=Array.from(e.children).filter((e=>e.offsetHeight>0&&e.offsetWidth>0));if(t.length<3)return!1;const n=new Set;return t.map((e=>`${e.offsetHeight}x${e.offsetWidth}`)).forEach((e=>n.add(e))),Array.from(n).every((e=>e.split("x").map((e=>Number(e))).every((e=>e>100))))})),animateGalleryPreviews:t=>{Array.from(t.children).map((e=>e.querySelector("img"))).filter((e=>!!e)).forEach(e.simulateHover)},getIsElementVisible:e=>e.offsetWidth>0&&e.offsetHeight>0,openTemporaryWindow:e=>{const t=window.open(e);return!t||t.closed||void 0===t.closed?(alert("[noop] couln't open window to send message"),!1):(setTimeout((()=>t.close()),1e4),!0)},addCssLinkIfNeeded:e=>{if(Array.from(document.head.querySelectorAll("link")).map((e=>e.href)).includes(e))return;const t=window.document.createElement("link");t.rel="stylesheet",t.type="text/css",t.href=e,document.getElementsByTagName("HEAD")[0].appendChild(t)},getMostCommonUnitElements:(e,t)=>{const n={};e.map(t).filter((e=>!!e)).forEach((e=>n[e]=(n[e]||0)+1));const a=Object.keys(n).reduce(((e,t)=>n[e]>n[t]?e:t));return e.filter((e=>t(e)===a))}},qs:(e,t=document)=>t.querySelector(e),qsa:(e,t=document)=>t.querySelectorAll(e),qsaArray:(t,n=document)=>Array.from(e.qsa(t,n)),qsaa:(t,n=document)=>e.qsaArray(t,n),lmkr:async e=>{const t=`https://sum-notifier.vercel.app/api/v1/notify?message=${encodeURIComponent(e)}&title=Chrome%20Helper`;return await fetch(t,{mode:"no-cors"}),!0},runSteps:async(t,n="",a=1e3)=>{try{for(let n=0;n<t.length;n++)t[n](),await e.sleep(a)}catch(e){n&&alert(n)}},lmkrWhenSelectedElementChanges:()=>{const t=()=>Math.round((new Date).getTime()/1e3),n=t(),a=$0;if(!a)return alert("[noop] select an element using element inspector an try again."),!1;const o=e=>[e.value||"",e.outerHTML||""].join(":"),s=o(a),i=e=>e.length>30?e.substr(0,29)+"…":e,r=(a,s)=>{const c=o(a);if(a&&c===s){const e=t()-n;e%60==0&&console.log(`[${Math.round(e/60)}m] still checking every 500ms...`),setTimeout((()=>r(a,s)),500)}else e.lmkr(`Watched element changed:\n🏁: ${i(c)}\n🏳: ${i(s)}`),console.log("notified element change")};return e.lmkr(`Watching for element changes:\n🏳: ${i(s)}`)?(r(a,s),window.MineElement=a,a):(alert("Unable to send messages. Fix that and try again."),!1)},colorElementsByValue:(e,t,n={})=>{const a=(e=e.filter((e=>!isNaN(t(e))))).map(t),o=n.filterOutliers?((e=[])=>{if(e.length<4)return{};let t,n,a,o,s;return t=e.slice().sort(((e,t)=>e-t)),t.length/4%1==0?(n=.5*(t[t.length/4]+t[t.length/4+1]),a=.5*(t[t.length*(3/4)]+t[t.length*(3/4)+1])):(n=t[Math.floor(t.length/4+1)],a=t[Math.ceil(t.length*(3/4)+1)]),o=a-n,s=1.5,{min:n-1.5*o,max:a+1.5*o}})(a):{},s=Math.min(...a),i=(o.max||Math.max(...a))-s;e.forEach((e=>{const a=[255,0,0],o=[0,255,0],r=n.invertColors?a:o,c=n.invertColors?o:a,l=(t(e)-s)/i,d=((e,t=[],n=[])=>{const a=(2*(1-e)-1+1)/2,o=1-a;return[parseInt(t[0]*a+n[0]*o),parseInt(t[1]*a+n[1]*o),parseInt(t[2]*a+n[2]*o)]})(l,r,c),m=0===l||l>=1;e.style[m?"border":"borderBottom"]=`4px RGB(${d.join(",")}) solid`,m&&(e.style.background=`RGB(${d.join(",")})`),m&&(e.style.color="white"),e.style.borderRadius="3px";const u=`Relative efficiency: ${Math.round(100*(n.invertColors?l:1-l))}%\n`;e.title=`${u}${e.title}`.trim()}))},sleep:async(e=1e3)=>new Promise((t=>setTimeout(t,e))),colorColumnByValue:(t,n="",a,o={})=>{if(!t)return!1;const s=Array.from(t?.tHead?.children[0]?.children||[]).findIndex((e=>e.innerText.trim().toLowerCase()===n.trim().toLowerCase())),i=Array.from(t.querySelectorAll(`tbody tr td:nth-child(${s+1})`));e.colorElementsByValue(i,a,o)},scrollToTop:(e=!1)=>window.scroll({top:0,left:0,behavior:e?"auto":"smooth"}),scrollToBottom:(e=!1)=>window.scroll({top:document.body.scrollHeight,left:0,behavior:e?"auto":"smooth"}),scrollToElement:(e,t=0)=>new Promise((n=>{const a=(window.pageYOffset||document.documentElement.scrollTop)+e.getBoundingClientRect().top-100+t;Math.round(window.scrollY)!==Math.round(a)?(window.scrollTo({top:a,left:0,behavior:"smooth"}),((e=()=>{})=>{const t=(n=null)=>{clearTimeout(n),n=setTimeout((()=>{n=null,removeEventListener("scroll",t),e()}),100)};addEventListener("scroll",t);const n=window.scrollY;setTimeout((()=>{window.scrollY===n&&(removeEventListener("scroll",t),e())}),100)})(n)):n()})),miniSpotlightElementWithCallback:async(t,n=e.noop)=>{if(!t)return;await e.scrollToElement(t);const a=t.getBoundingClientRect(),o=a.left+window.scrollX,s=a.top+window.scrollY,i=a.width,r=a.height,c="__CommandBarMine_circler__",l=()=>e.qs(`#${c}`);((e,t)=>{const n=l();n&&n.remove();const a=document.createElement("div");a.id=c,a.style.position="absolute",a.style.border="10px solid slateblue",a.style.borderRadius="20px",a.style.boxShadow="rgba(0, 0, 0, 0.45) 0px 0px 50px",a.style.width=e+30+"px",a.style.height=t+30+"px",a.style.pointerEvents="none",a.style.opacity="0",a.style.transition="opacity 500ms",a.style.zIndex="100000000",document.body.append(a)})(i,r);const d=l(),m=d.offsetWidth;d.style.top=s-(d.offsetHeight-r)/2+"px",d.style.left=o-(m-i)/2+"px",d.style.opacity="1",await e.sleep(500),await n(),await e.sleep(200),d.style.opacity="0",await e.sleep(500)},simulateClickWithHint:async t=>{t&&await e.miniSpotlightElementWithCallback(t,(()=>e.simulateClick(t)))},simulateClick:(e,t=[])=>{if(!e)return;const n=t.includes("left_quarter"),a=e.getBoundingClientRect(),o=a.left+(a.right-a.left)*(n?.2:.5),s=a.top+.5*(a.bottom-a.top);["mousedown","mouseup","click"].forEach((t=>((e,t,n,a)=>e.dispatchEvent(new MouseEvent(t,{view:window,bubbles:!0,cancelable:!0,clientX:n,clientY:a,button:0})))(e,t,o,s)))},simulateHover:e=>e.dispatchEvent(new Event("mouseover",{view:window,bubbles:!0,cancelable:!1})),assertTruthy:e=>{if(e)return e;throw"assertion failed"},waitFor:async(t,{timeoutMs:n=5e3,recheckIntervalMs:a=null,shouldPadDelay:o=!1,debugMsg:s=""}={})=>{const i=Date.now();for(;;){const r=await t();if(r)return o&&await e.sleep(25),r;const c=Date.now()-i;if(c>=n)throw new Error("Timeout"+(s.trim()?`: ${s.trim()}`:""));if(null==a){const t=c<=500;await e.sleep(t?0:5)}else await e.sleep(Number(a))}},waitForQs:async(t,n={})=>await e.waitFor((()=>e.qs(t)),n),waitForQsaa:async(t,n={})=>await e.waitFor((()=>{const e=document.querySelectorAll(t);return e.length?[...e]:null}),n),getQueryParam:e=>{const t=window.location.search,n=new URLSearchParams(t);return n.has(e)?n.get(e):null},noop:()=>{},injectStylesheetIdempotent:(t="")=>{const n=t.trim();if(e.qsaa("style").map((e=>e.textContent)).some((e=>e===n)))return e.noop;const a=document.createElement("style");return a.textContent=n,document.head.appendChild(a),()=>a.remove()},injectStylesheetIdempotentCspFriendly:(t="")=>{const n=t.trim(),a=`style-${o=n,o.split("").reduce(((e,t)=>(e<<5)-e+t.charCodeAt(0)),0)}`;var o;if(document.getElementById(a))return e.noop;const s=document.createElement("style");s.id=a;const i=new Blob([n],{type:"text/css"}),r=URL.createObjectURL(i);return s.href=r,document.head.appendChild(s),()=>{URL.revokeObjectURL(r),document.getElementById(a)?.remove()}},injectScriptIdempotent:async(t,n=!1)=>new Promise(((a,o)=>{if(e.qsaa("script").map((e=>e.src)).some((e=>e===t)))return a();const s=document.createElement("script");s.type="text/javascript",s.async=!0,s.onload=a,s.onerror=o;try{s.src=t}catch(e){if(!n)throw e;if(!window.trustedTypes||!trustedTypes.createPolicy)throw new Error("[Mine] [Pepper] Trusted Types not supported and direct assignment failed");{const e=trustedTypes.createPolicy("injectPolicy",{createScriptURL:e=>e});s.src=e.createScriptURL(t)}}document.getElementsByTagName("head")[0].appendChild(s)})),wrapAddEventListenerWithBlockers:(e=[])=>{Object.getOwnPropertyNames(window).filter((e=>/^HTML/.test(e))).map((e=>window[e])).forEach((t=>{var n;n=t.prototype.addEventListener,t.prototype.addEventListener=function(t,a,o){const s=this;if(!e.some((e=>t===e.type&&s.matches(e.querySelector))))return n.apply(this,arguments)}}))},PepperAgent:class{constructor(e,t=[]){this.name=e,this.commands=t,this.#e(),this.#t()}#e(){this.commands.push({title:"restart",description:"",run:async()=>{window.open("http://reload.extensions"),setTimeout((()=>location.reload()),3e3)}})}async#t(){const t=["https://www.youtube.com","https://open.spotify.com"].includes(window.location.origin)&&["personal","personal-assistant"].includes(e.Environment?.Profile?.name);return await e.injectScriptIdempotent("https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.5.4/socket.io.js",t).catch((()=>null))?(this.socket=io("https://pepperpotts.fly.dev:443",{query:{name:this.name,commands:this.commands}}),this.socket.on("connect",(()=>{console.log("[Mine] [Pepper] connected"),this.socket.emit("register-commands",this.commands)})),this.socket.on("disconnect",(e=>{console.log("[Mine] [Pepper] disconnected"),"io server disconnect"===e&&(console.log("[Mine] [Pepper] trying to reconnect..."),this.socket.connect())})),this.commands.forEach((({title:e,run:t})=>{this.socket.on(e,(async(e,n)=>{n(await t()||{success:!0})}))})),window.addEventListener("focus",(()=>{this.socket.connected&&this.socket.disconnect(),this.socket.connect()})),!0):(console.log("[Mine] [Pepper] aborted due to script injection abortion"),!1)}async ask(e,t=[],n=()=>{},a=6e4){const o={questionObj:e,responseOptions:t,timeoutMs:a};this.socket.timeout(a).emit("ask",o,n)}},randomItemFromArray:e=>e[Math.floor(Math.random()*e.length)],setIntervalAndNow:(e,t=1e3)=>{e(),setInterval(e,t)},processUnprocessedItems:(t=[],n,a="")=>{const o="data-mine-processed"+(a?`-${a}`:""),s=Array.from(t).filter(Boolean).filter((e=>!("true"===e.getAttribute(o)))),i=e=>e.setAttribute(o,"true");for(let t=0;t<s.length;t++){const a=s[t];if("AsyncFunction"===a.constructor.name)n(a).then((()=>i(a))).catch(e.noop);else{try{n(a)}catch(e){continue}i(a)}}},setQueryParam:(e,t)=>{const n=new URL(window.location);n.searchParams.set(e,t),window.location=n.href},dim:(e,{hoverDelayMs:t=500}={})=>{if(!e)return;(e=>{const t=e.style.transition.split(",").map((e=>e.trim())).filter((e=>e.length)).filter((e=>!e.includes("opacity")));t.push("opacity 0.2s ease"),e.style.transition=t.join(", ")})(e);const n="0.05";let a;const o=()=>{a=setTimeout((()=>{e.style.removeProperty("opacity")}),t)},s=()=>{clearTimeout(a),e.style.opacity=n},i="data-mine-dimmed";return e.setAttribute(i,"true"),e.style.setProperty("opacity",n),e.addEventListener("mouseover",o),e.addEventListener("mouseout",s),()=>{e.removeAttribute(i),e.style.removeProperty("opacity"),e.removeEventListener("mouseover",o),e.removeEventListener("mouseout",s)}}};e.quietElement=e.dim,e.quietElementCompletelyAsync=async e=>{if(e&&e instanceof Element)return e.style.transition="opacity 200ms ease-out",e.style.opacity="0",new Promise((t=>{setTimeout((()=>{e.style.visibility="hidden",t(e)}),200)}))},e.getIndexedDbValueAsync=async(e,t,n)=>new Promise(((a,o)=>{const s=indexedDB.open(t);s.onerror=e=>o(`An error occurred while accessing the database: ${e.target.errorCode}`),s.onsuccess=t=>{const s=t.target.result.transaction([n],"readonly").objectStore(n).get(e);s.onerror=e=>o(`An error occurred while retrieving the data: ${e.target.errorCode}`),s.onsuccess=e=>a(e.target.result)}})),e.getIndexedDbValue=e.getIndexedDbValueAsync,e.DELETE_SENTINEL=Symbol("IndexedDB Delete Sentinel"),e.setIndexedDbValueAsync=async(t,n,a,o)=>new Promise(((s,i)=>{if(!t||!a||!o)return i("Required arguments missing");const r=indexedDB.open(a);r.onerror=e=>i(`Database access error: ${e.target.error}`),r.onsuccess=a=>{const r=a.target.result,c=r.transaction([o],"readwrite"),l=c.objectStore(o),d=n===e.DELETE_SENTINEL?l.delete(t):l.put(n,t);d.onerror=e=>i(`Operation error: ${e.target.error}`),d.onsuccess=()=>s(n===e.DELETE_SENTINEL?`Key ${t} deleted`:`Key ${t} set`),c.oncomplete=()=>r.close()}})),e.setIndexedDbValue=e.setIndexedDbValueAsync,e.deleteIndexedDbValueAsync=async(t,n,a)=>await e.setIndexedDbValueAsync(t,e.DELETE_SENTINEL,n,a),e.addEventListenerForSubtreeAddOrRemove=(e,t)=>{const n=new MutationObserver(((e,n)=>{for(let n of e)"childList"===n.type&&t()}));return n.observe(e,{childList:!0,subtree:!0}),()=>n.disconnect()},e.onElementRemoval=(e,t)=>{new MutationObserver(((n,a)=>{e.isConnected||(a.disconnect(),t())})).observe(document,{childList:!0,subtree:!0})},e.onElementRemove=e.onElementRemoval,e.colorizeByContent=(t=[],n=e=>e.innerText,a="content")=>e.pui(t,(async t=>{const a=n(t),o=await e.getHashedStringToHexAsync(a);t.style.transition||(t.style.transition="color 0.1s ease-in-out"),t.style.setProperty("color",o,"important")}),`${a}-colorizer`),e.colorizeElementsByContent=e.colorizeByContent,e.colorizeElementByContent=(t,...n)=>e.colorizeByContent([t],...n),e.withCacheInSession=e=>{const t=e.name||e.toString().slice(0,100);return async(...n)=>{const a=`mine.cached.${encodeURIComponent(t)}.${encodeURIComponent(JSON.stringify(n))}`,o=window.sessionStorage.getItem(a);if(o)return JSON.parse(o);const s=await e(...n);return void 0!==s&&window.sessionStorage.setItem(a,JSON.stringify(s)),s}},e.isi=e.injectStylesheetIdempotent,e.withCacheInMemory=e=>{const t=new Map;return async(...n)=>{const a=JSON.stringify(n);if(t.has(a))return t.get(a);const o=await e(...n);return t.set(a,o),o}};const t=e.withCacheInMemory((e=>{if("string"!=typeof e)throw new Error("Color input must be a string");const t=e=>{const t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16)}:null},n={black:"#000000",white:"#ffffff",red:"#ff0000",lime:"#00ff00",blue:"#0000ff",yellow:"#ffff00",cyan:"#00ffff",magenta:"#ff00ff",silver:"#c0c0c0",gray:"#808080",maroon:"#800000",olive:"#808000",green:"#008000",purple:"#800080",teal:"#008080",navy:"#000080"};if(e.startsWith("#"))return t(e);if(e.toLowerCase().startsWith("rgb("))return(e=>{const t=/rgb\((\d+),\s*(\d+),\s*(\d+)\)/i.exec(e);return t?{r:parseInt(t[1],10),g:parseInt(t[2],10),b:parseInt(t[3],10)}:null})(e.toLowerCase());if(e.toLowerCase()in n)return(e=>{const a=n[e.toLowerCase()];return a?t(a):null})(e);if(e.toLowerCase().startsWith("rgba("))return(e=>{const t=/rgba\((\d+),\s*(\d+),\s*(\d+),\s*[\d.]+\)/i.exec(e);return t?{r:parseInt(t[1],10),g:parseInt(t[2],10),b:parseInt(t[3],10)}:null})(e.toLowerCase());throw new Error(`Invalid color format provided: ${e}. Accepts hex string, RGB string, or named HTML color.`)})),n=e.withCacheInMemory((e=>{const t=[e.r,e.g,e.b].map((e=>e/255)).map((e=>e<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4)));return.2126*t[0]+.7152*t[1]+.0722*t[2]})),a=e.withCacheInMemory((async(e,t)=>{const a=await n(e),o=await n(t);return(Math.max(a,o)+.05)/(Math.min(a,o)+.05)})),o=e.withCacheInMemory((e=>{let t=0;for(let n=0;n<e.length;n++)t=Math.imul(31,t)+e.charCodeAt(n)|0;let n="#";for(let e=0;e<3;e++)n+=(t>>8*e&255).toString(16).padStart(2,"0");return n}));e.getHashedStringToHexAsync=e.withCacheInMemory((async(e,n)=>{let s=await o(e);if(n){const i=4.5;let r=0;const c=10,l=await t(n);let d=0,m=s;const u=async e=>{const n=await a(await t(e),l);return n>d&&(d=n,m=e),n};let p=await u(s);for(;p<i&&r<c;)r++,s=await o(e+r),p=await u(s);s=m}return s})),e.getCssToHide=e=>`\n ${e} {\n display: none !important;\n }\n `,e.getCssToQuietQs=(e,{delayMs:t=1e3}={})=>`\n${e} {\n opacity: 0.2;\n transition: opacity 0.2s ease-in-out !important;\n}\n${e}:hover {\n transition-delay: ${t/1e3}s !important;\n opacity: 1;\n}\n `.trim(),e.bindHotkey=(e,t=document,n)=>{const a=e.split("+").map((e=>e.trim().toLowerCase()));let o="";const s={shiftKey:!1,ctrlKey:!1,altKey:!1,metaKey:!1};a.forEach((e=>{const t=Object.keys(s).find((t=>t.toLowerCase()===e));t?s[t]=!0:o=e}));const i=e=>{const a=t!==document||!["input","textarea","select","button"].includes(e.target.tagName?.toLowerCase())&&!e.target.isContentEditable,i=e.key.toLowerCase()===o;Object.keys(s).every((t=>s[t]===e[t]))&&i&&a&&n(e)};return t.addEventListener("keydown",i),()=>t.removeEventListener("keydown",i)},e.Ollama={getIsStatementTrueOrFalse:async t=>await e.Ollama.getDoesPassageAnswerQuestion(t,"Is this true?"),getDoesPassageAnswerQuestion:async(t="I like apples",n="Do they like fruits?")=>{const a=`\n ${n} Respond with "YES" or "NO".\n\n Passage (in triple quotes):\n """\n ${(t=String(t)).split("\n").map((e=>`> ${e}`)).join("\n")}\n """\n `.trim();return((e="")=>{const t=e.trim().toLowerCase().startsWith("yes,"),n="yes"===e.replace(/[^a-zA-Z]/g,"").toLowerCase().split(" ")[0];return t||n})(await e.Ollama.getResponseText(a).then((e=>e.trim())))},_getResponseTextUnmanagedAsync:async(t,{model:n="phi4:latest",systemPrompt:a="",jsonMode:o=!1,startResponseWith:s="",keep_alive:i=9e5}={})=>{const r=[{role:"user",content:t}];a&&r.unshift({role:"system",content:a}),s&&r.push({role:"assistant",content:s});const c={model:n,messages:r,stream:!1,options:{temperature:0},keep_alive:i};o&&(c.format="json");const l=JSON.stringify(c),d=await e.Extension.fetchText("http://127.0.0.1:11434/api/chat",{method:"POST",headers:{"Content-Type":"application/json"},body:l});if(!d)throw new Error("error fetching");return s+d.split("\n").filter(Boolean).map((e=>JSON.parse(e)))[0].message.content},_getResponseJsonUnmanagedAsync:async(t,n={})=>{n.jsonMode=!0;const a=await e.Ollama._getResponseTextUnmanagedAsync(t,n);let o=null;try{o=JSON.parse(a.trim())}catch(e){}return o},getResponseText:async(t,n={})=>await e.withCacheInSession(e.Ollama._getResponseTextUnmanagedAsync)(t,n),getResponseJsonAsync:async(t,n={})=>await e.withCacheInSession(e.Ollama._getResponseJsonUnmanagedAsync)(t,n),_getResponseObjs:async(t="",n=!0)=>{const a=JSON.stringify({model:"openhermes:7b-mistral-v2.5-q6_K",prompt:t,temperature:0}),o=await e.Extension.fetchText("http://127.0.0.1:11434/api/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:a});if(!o)throw new Error("error fetching");return o.split("\n").filter(Boolean).map((e=>JSON.parse(e)))}},e.Ai={getResponseText:async(...t)=>await e.withCacheInSession(e.Ai._getResponseTextRaw)(...t),_getResponseTextRaw:async(t,n="",{imageDataBase64:a=null,brand:o="anthropic",options:s={}}={})=>{let i=t;a&&(i=[{type:"text",text:t},{type:"image",source:{type:"base64",media_type:"image/png",data:a}}]);const r=[{role:"user",content:i}];let c="";const l=await(async t=>"anthropic"===t?await e.Extension.getItem("commandbar-anthropic-key").catch((()=>null)):"cerebras"===t?await e.Extension.getItem("commandbar-cerebras-key").catch((()=>null)):"groq"===t?(c=e.randomItemFromArray(["commandbar-groq-key"]),await e.Extension.getItem(c).catch((()=>null))):"sambanova"===t?await e.Extension.getItem("commandbar-sambanova-key").catch((()=>null)):null)(o);if(!l)return e.toastError(`No AI key for "${o}"`);let d;return"anthropic"===o?d=await(async t=>{const a={model:"claude-3-5-sonnet-20241022",temperature:1,stream:!1,messages:t,max_tokens:4096,system:n,...s};return(await e.Extension.fetchJson("https://api.anthropic.com/v1/messages",{method:"POST",headers:{"Content-Type":"application/json",accept:"*/*","accept-language":"en-US,en;q=0.9","anthropic-beta":"max-tokens-3-5-sonnet-2024-07-15,prompt-caching-2024-07-31","anthropic-dangerous-direct-browser-access":"true","anthropic-version":"2023-06-01","x-api-key":l},body:JSON.stringify(a)})).content[0].text})(r):"cerebras"===o?d=await(async t=>{const n=await e.Extension.fetchJson("https://api.cerebras.ai/v1/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${l}`},body:JSON.stringify({model:"llama3.1-70b",temperature:1,stream:!1,messages:t,max_completion_tokens:-1,seed:0,top_p:1,...s})});if("too_many_requests_error"===n.type)throw"too_many_requests_error";const a=n.choices?.[0]?.message;if(!a)throw"no message in response";return a.content})(r):"groq"===o?d=await(async t=>{const n=await e.Extension.fetchJson("https://api.groq.com/openai/v1/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${l}`},body:JSON.stringify({model:"llama-3.2-90b-vision-preview",temperature:1,stream:!1,messages:t,seed:0,top_p:1,...s})});if(n.type)throw`error "${n.type}"`;const a=n.choices?.[0]?.message;if(!a)throw console.log(`ai failed w key '${c}'`,n),"unexpected ai response";return a.content})(r):"sambanova"===o&&(d=await(async t=>{const n=await e.Extension.fetchJson("https://api.sambanova.ai/v1/chat/completions",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${l}`},body:JSON.stringify({stream:!1,model:"Meta-Llama-3.1-405B-Instruct",messages:t,...s})}),a=n.choices?.[0]?.message;if(!a)throw"no message in response";return a.content})(r)),d}},e.spotlightElement=t=>{let n,a;t||(t=document.createElement("button"));try{n=t.getBoundingClientRect()}catch(e){return console.warn("Failed to get element bounds"),()=>{}}const o=()=>{e.qsaa(".mine-wall").forEach((e=>{e.style.opacity="0",setTimeout((()=>e.remove()),200)})),a?.disconnect(),a=null};a=new MutationObserver((e=>{e.forEach((e=>{if("style"===e.attributeName){const e=t.getBoundingClientRect();e.left===n.left&&e.top===n.top||o()}else"childList"!==e.type||document.body.contains(t)||o()}))})),a.observe(t,{attributes:!0,attributeFilter:["style"],childList:!0,subtree:!0});const s=document.createElement("div");return s.classList.add("mine-wall"),Object.assign(s.style,{position:"fixed",top:"0",left:"0",width:"100%",height:"100%",background:"rgba(0, 0, 0, 0.8)",zIndex:"10000",opacity:"0",transition:"opacity 100ms",clipPath:(e=>`polygon(\n 0px 0px, 100% 0px,\n 100% ${e.top}px,\n ${e.left}px ${e.top}px,\n ${e.left}px ${e.bottom}px,\n ${e.right}px ${e.bottom}px,\n ${e.right}px ${e.top}px,\n 100% ${e.top}px,\n 100% 100%, 0px 100%\n )`)(n)}),s.addEventListener("click",o),document.body.append(s),requestAnimationFrame((()=>requestAnimationFrame((()=>s.style.opacity="1")))),o},e.pui=e.processUnprocessedItems,e.processUnprocessedItemsContinuallyAsync=async(t,n,a="")=>{a=a||Date.now().toString();let o=!0;const s=async()=>{if(o){try{e.pui(t(),n,a)}catch(e){}setTimeout(s,1e3)}};return s(),()=>o=!1},e.processUnprocessedItemsContinually=e.processUnprocessedItemsContinuallyAsync,e.puic=e.processUnprocessedItemsContinually,e.hideQs=t=>e.isi(e.getCssToHide(t)),e.quietQs=(t,n={})=>e.isi(e.getCssToQuietQs(t,n)),e.removeElementAsync=async e=>new Promise((t=>{if(!e)return void t();const n=window.getComputedStyle(e),a=n.height;e.style.width=n.width,e.style.height=a,requestAnimationFrame((()=>{e.style.transition="opacity 150ms, width 150ms, height 150ms",e.style.opacity="0",e.style.width="0",e.style.height="0",e.style.overflow="hidden",e.addEventListener("transitionend",(function n(a){"opacity"===a.propertyName&&(e.removeEventListener("transitionend",n),e.remove(),t())}))}))})),e.removeElement=e.removeElementAsync,e.removeEle=e.removeElement,e.collapse=(e,t="100px")=>{if(!e)return;const n=document.createElement("div");n.style="position: relative; overflow: hidden; transition: max-height 0.1s ease;",n.style.maxHeight=`${e.offsetHeight}px`;const a=document.createElement("div");a.title="Expand collapsed item",a.style="position: absolute; bottom: 0; left: 0; right: 0; height: 100%; background: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.2)); cursor: pointer; border-radius: 5px;",e.parentNode.insertBefore(n,e),n.appendChild(e),n.appendChild(a),setTimeout((()=>n.style.maxHeight=t),0),a.addEventListener("click",(()=>{const e=n.style.maxHeight===t;n.style.maxHeight=e?`${n.scrollHeight}px`:t,a.style.display=e?"none":"block"}));const o=new MutationObserver((e=>{e.forEach((e=>{if("childList"===e.type){for(a.remove();n.firstChild;)n.parentNode.insertBefore(n.firstChild,n);n.parentNode.removeChild(n),o.disconnect()}}))}));o.observe(n,{childList:!0})},e.attachToElementContinuouslyAsync=async(t=()=>{},n=()=>{},a={})=>{const o=async()=>{const s=await t().catch((()=>null));s?(await n(s),e.onElementRemoval(s,(async()=>{a.onElementGone&&await a.onElementGone(),o()}))):a.onElementNotFound&&await a.onElementNotFound()};await o()},e.attachToElementContinuously=e.attachToElementContinuouslyAsync,e.throttle=(e,t=1e3)=>{let n=0;return(...a)=>{const o=Date.now();o-n<t||(n=o,e(...a))}},e.debounce=(e,t=1e3,n=null)=>(...a)=>(clearTimeout(n),n=setTimeout((()=>e(...a)),t));const s=[];return e.toastAsync=(e="",t,n={})=>new Promise((a=>{e=e.toString(),t||(t=Math.min(3e3+1e3*e.split(" ").length*.75,2e4));const{severity:o="info"}=n,i=o.toLowerCase();let r="";"info"!==i&&(r=`box-shadow: inset 0 0 0 2px ${{error:"red",warning:"orange",success:"limegreen"}[i]||"transparent"};`);const c=document.createElement("div");c.className="mine-hud-msg",c.textContent=e,c.style.cssText=`\n position: fixed;\n bottom: 20px;\n right: 20px;\n padding: 10px 20px;\n background: rgba(0,0,0,0.9);\n color: white;\n ${r}\n border-radius: 5px;\n transition: all 0.3s;\n opacity: 0;\n transform: translateY(100%);\n z-index: 10000;\n max-width: 300px;\n word-wrap: break-word;\n user-select: text;\n touch-action: pan-x;\n text-align: left;\n `,document.body.appendChild(c);const l=()=>{s.forEach(((e,t)=>{e.style.bottom=20+t*(e.offsetHeight+10)+"px"}))},d=()=>{if(document.hidden)return void setTimeout(d,1e3);c.style.transition="all 0.3s",c.style.transform="translateX(100%)",c.style.opacity="0";const e=s.indexOf(c);e>-1&&s.splice(e,1),l(),setTimeout((()=>{c.remove(),a()}),300)};let m,u;const p=()=>{const e=window.getSelection();return e.toString().length>0&&c.contains(e.anchorNode)};c.addEventListener("touchstart",(e=>{p()||(m=e.touches[0].clientX,u=Date.now(),c.style.transition="none")})),c.addEventListener("touchmove",(e=>{if(!m||p())return;const t=e.touches[0].clientX-m;t>0&&(e.preventDefault(),c.style.transform=`translateX(${t}px)`)})),c.addEventListener("touchend",(e=>{if(!m||p())return;const t=e.changedTouches[0].clientX-m,n=Date.now()-u;t>50&&n<300?d():(c.style.transition="transform 0.3s",c.style.transform="translateY(0)"),m=null})),s.push(c),l(),requestAnimationFrame((()=>{c.style.opacity="1",c.style.transform="translateY(0)"})),setTimeout(d,t)})),e.toast=e.toastAsync,e.toastInfo=(t,n)=>e.toast(t,n,{severity:"info"}),e.toastWarning=(t,n)=>e.toast(t,n,{severity:"warning"}),e.toastError=(t,n)=>e.toast(t,n,{severity:"error"}),e.toastSuccess=(t,n)=>e.toast(t,n,{severity:"success"}),e.getAnimationFrameAsync=async()=>new Promise((e=>requestAnimationFrame(e))),e.deduplicate=e=>[...new Set(e)],e.Obfuscator={_key:71,_xor:(()=>{const t=new Map;return n=>{if(t.has(n))return t.get(n);const a=String.fromCharCode(...n.split("").map((t=>t.charCodeAt(0)^e.Obfuscator._key)));return t.set(n,a),a}})(),_process:t=>{if("string"==typeof t)return e.Obfuscator._xor(t);if("object"!=typeof t||null===t)return t;const n=Object.entries(t);for(let a=n.length-1;a>=0;a--){const[o,s]=n[a];delete t[o],t[e.Obfuscator._xor(o)]="object"==typeof s&&null!==s?e.Obfuscator._process(s):"string"==typeof s?e.Obfuscator._xor(s):s}return t},obfuscate:t=>e.Obfuscator._process(t),deobfuscate:t=>e.Obfuscator._process(t)},e.Extension={_remoteDistachedFunctionRequestCounter:0,serveRemoteDispatchedFunction:(t,n)=>{document.addEventListener(e.Obfuscator.obfuscate(t),(async a=>{const o=e.Obfuscator.deobfuscate(a.detail);let s,i;try{i=await n(o)}catch(a){s=a}const r={data:i,_requestId:o._requestId,error:s};document.dispatchEvent(new CustomEvent(e.Obfuscator.obfuscate(`${t}Response`),{bubbles:!1,detail:e.Obfuscator.obfuscate(r)}))}))},callRemoteDispatchedFunction:async(t,n={})=>new Promise(((a,o)=>{const s=e.Extension._remoteDistachedFunctionRequestCounter++,i=e.Obfuscator.obfuscate(`${t}Response`),r=async t=>{const n=e.Obfuscator.deobfuscate(t.detail);return n._requestId===s?(document.removeEventListener(i,r),n.error?o(n.error):a(n.data)):null};document.addEventListener(i,r),document.dispatchEvent(new CustomEvent(e.Obfuscator.obfuscate(t),{bubbles:!1,detail:e.Obfuscator.obfuscate({...n,_requestId:s})}))})),runCommand:async(t,n={})=>await e.Extension.callRemoteDispatchedFunction("executeMineForExtensionCommand",{commandName:t,commandConfig:n}),getCurrentFocusedTabUrl:t=>e.Extension.runCommand("getCurrentFocusedTabUrl",t),getCurrentFocusedTabInfo:t=>e.Extension.runCommand("getCurrentFocusedTabInfo",t),openTab:async t=>await e.Extension.runCommand("openTab",t),closeTab:async t=>await e.Extension.runCommand("closeTab",t),copyText:t=>e.Extension.runCommand("copyText",{text:t}),getItems:async t=>await e.Extension.runCommand("getItems",{keys:t}),getItem:async t=>await e.Extension.runCommand("getItem",{key:t}),setItem:async(t,n)=>await e.Extension.runCommand("setItem",{key:t,value:n}),getIsHiddenMode:async()=>await e.Extension.runCommand("getIsHiddenMode"),setIsHiddenMode:async(t=!0)=>await e.Extension.runCommand("setIsHiddenMode",{isHidden:t}),fetchJson:async(t,n={})=>await e.Extension.runCommand("fetchJson",{url:t,options:n}),fetchText:async(t,n={})=>await e.Extension.runCommand("fetchText",{url:t,options:n})},e.CommandBar={_getCommandsFns:[],serveGetCommandsFnAsync:async t=>{const n=!e.CommandBar._getCommandsFns.length;if(e.CommandBar._getCommandsFns.push(t),n){let t=[];e.Extension.serveRemoteDispatchedFunction("getCommandBarCommands",(async n=>(t=await Promise.all(e.CommandBar._getCommandsFns.map((async e=>await e()))).then((e=>e.flat())),{commandsLite:t.map((e=>({site:e.site,title:e.title,analytics:e.analytics,showHintNotToInteract:e.showHintNotToInteract,isStatusBar:e.isStatusBar,hideFromAi:e.hideFromAi,hotkeySequence:e.hotkeySequence})))}))),e.Extension.serveRemoteDispatchedFunction("executeCommandBarCommand",(async n=>{const{commandName:a,context:o={}}=n,s=t.find((e=>e.title===a));return o.getShouldInterruptAsync=async()=>await e.Extension.callRemoteDispatchedFunction("getCommandBarShouldInterruptForCommand",{commandName:a}),await s.run(o)}))}const a=e.Obfuscator.obfuscate("minePageHasNewCommandBarCommands");document.dispatchEvent(new CustomEvent(a,{bubbles:!1})),sessionStorage.setItem(a,!0)},_servePageApiAlreadyInit:!1,serveGetPageApiWrapperFnAsync:async t=>{if(e.CommandBar._servePageApiAlreadyInit)throw"already initiated pageApi wrapper";let n;e.CommandBar._servePageApiAlreadyInit=!0;const a=e=>{const t=JSON.stringify(e,((e,t)=>"function"==typeof t?t.toString():t),2),n=JSON.parse(t);return Object.entries(n).map((([e,t])=>`${e}: ${t.split("=>")[0].trim()}`)).map((e=>`* ${e}`)).join("\n")};e.Extension.serveRemoteDispatchedFunction("getCommandBarPageApiWrapper",(async e=>{const o=await t();return n=await o.getPageApi(),{site:o.site,aiBrand:o.aiBrand,pageInitialContext:await o.getPageInitialContext(),pageApiStr:a(n)}})),e.Extension.serveRemoteDispatchedFunction("executeCommandBarPageApiFn",(async e=>{const{function_name:t,function_argument_object:a={}}=e,o=n[t];if(!o)throw"command not found";return await o(a)}));const o=e.Obfuscator.obfuscate("minePageHasCommandBarPageApi");document.dispatchEvent(new CustomEvent(o,{bubbles:!1})),sessionStorage.setItem(o,!0)}},e.CommandBar.isCurrentUrlMatchedByPattern=(e="")=>window.location.href.toLowerCase().startsWith(e.toLowerCase())||window.location.href.match(new RegExp(e,"i")),e.CommandBar.buildCommandsIfAtSite=async(t,n)=>{if(!e.CommandBar.isCurrentUrlMatchedByPattern(t))return[];const a=await n();return a.forEach((e=>e.site=t)),a},e.CB=e.CommandBar,e.waitForMaybeElement=t=>new Promise((async n=>{const a=await e.waitFor(t,{recheckIntervalMs:500,timeoutMs:1e4}).catch((()=>null));a&&n(a)})),e.TypingMind={_setChatStarter:async(t="",n="")=>{const a=await e.Extension.getItem("pepperSetDataKey");return!!a&&await(async()=>{const o=e=>btoa(e),s=JSON.stringify({key:"chatStarterBuffer",data:{query:o(t.trim()),context:o((n??"").trim()),createdDate:Date.now()}}),i={method:"POST",headers:{"Content-Type":"application/json","pepper-api-key":a},body:s};return(await e.Extension.fetchJson("https://pepperpotts.fly.dev/apps/setData",i)).success})()},startChat:async(t="",n="")=>{await e.TypingMind._setChatStarter(t,n),window.open("https://www.typingmind.com/")}},e.TM=e.TypingMind,e.showFloatingMiniWindow=(e,t="Info")=>{const n=e instanceof Element,a=n?e:document.createElement("div");n||(a.innerHTML=e);const o=(e,t,n="")=>{const a=document.createElement(e);return a.style.cssText=t,a.textContent=n,a},s=o("div","\n position: fixed;\n background: #2c2c2c;\n border: 1px solid #444;\n border-radius: 8px;\n box-shadow: 0 10px 25px rgba(0,0,0,0.5);\n min-width: 260px;\n max-width: 80vw;\n width: max-content;\n overflow: hidden;\n max-height: 80vh;\n display: flex;\n flex-direction: column;\n z-index: 1000;\n opacity: 0;\n transition: opacity .15s ease-out;\n "),i=s.attachShadow({mode:"open"}),r=document.createElement("style");r.textContent="\n :host {color: #e0e0e0; font-family: Arial, sans-serif;}\n .handle {\n background: #383838;\n padding: 3px 12px 2px;\n cursor: move;\n user-select: none;\n font-size: 14px;\n font-weight: bold;\n border-bottom: 1px solid #444;\n }\n .close-btn {\n float: right;\n cursor: pointer;\n font-size: 18px;\n line-height: 18px;\n color: #888;\n transition: opacity .1s ease-out, color .2s;\n opacity: 0;\n }\n .content-wrapper {\n padding: 10px;\n overflow-y: auto;\n flex-grow: 1;\n }\n ";const c=o("div","",t);c.className="handle";const l=o("span","","×");l.className="close-btn";const d=o("div","");d.className="content-wrapper",l.onmouseover=()=>l.style.color="#fff",l.onmouseout=()=>l.style.color="#888",l.onclick=()=>{s.style.opacity="0",setTimeout((()=>document.body.removeChild(s)),200)},c.appendChild(l),d.appendChild(a),i.appendChild(r),i.appendChild(c),i.appendChild(d),document.body.appendChild(s);const m=s.getBoundingClientRect();s.style.left=(window.innerWidth-m.width)/2+"px",s.style.top=(window.innerHeight-m.height)/2+"px",setTimeout((()=>s.style.opacity="1"),10);let u,p,y,h,g=!1;return c.addEventListener("mousedown",(e=>{g=!0,u=e.clientX,p=e.clientY,y=s.offsetLeft,h=s.offsetTop,s.style.transition="none"})),document.addEventListener("mousemove",(e=>{if(g){const t=e.clientY-p;s.style.left=`${y+(e.clientX-u)}px`,s.style.top=`${h+t}px`}})),document.addEventListener("mouseup",(()=>{g=!1,s.style.transition="opacity .2s ease-out"})),c.addEventListener("mouseenter",(()=>l.style.opacity="1")),c.addEventListener("mouseleave",(()=>l.style.opacity="0")),s},e.CommandBar.executeCommandAsUserAsync=async t=>{const n=e.Obfuscator.obfuscate("minePageHasNewCommandBarCommands");await e.waitFor((()=>!window.sessionStorage.getItem(n))),await e.Extension.callRemoteDispatchedFunction("executeCommandBarCommandVisibly",{commandName:t})},e.debugSoon=async()=>{await e.sleep(3e3)},e};window.Mine=e()}MineTm.Mine=Mine;const isAiTyping=()=>!!MineTm.getStopButton(),isMobile=MineTm.isMobile,getIsChatScrolledToNearBottom=(e=0)=>{const t=Mine.qs("html");return t.scrollHeight-t.scrollTop<=t.clientHeight+e+1};MineTm.mapEachNonEmptyLine=(e,t)=>e.split("\n").filter((e=>!!e.trim())).map(t).join("\n");const getSendButton=()=>Mine.qs('[data-element-id="send-button"]'),clickTaMaybeSubmitButtonWithPluginsEnabledEphemerallyAsync=async()=>{const e=getSendButton();e&&(await MineTm.setPluginsStateAsync(!0,Mine),e.click(),await Mine.sleep(2e3),await MineTm.setPluginsStateAsync(!1,Mine))},postProcessTaForSubmissionAsync=async()=>{const e=await MineTm.getTaAsync();let t=e.value;const n=(e=>{const t=e.match(/ -([a-zA-Z0-9]+)$/);return t?t[1]:null})(t);if(n){const a=(e,t)=>e.endsWith(t)?e.slice(0,-t.length):e;let o=[];const s={gc:async()=>{t=function(e){const t=e.match(/"""([\s\S]*?)"""/);return t?function(e){let t=new Map,n=new Map;return t.set("You","S"),n.set("S","You"),e.split("\n").map((e=>(e=e.replace(/[^\x00-\x7F\u{1F600}-\u{1F64F}\u{1F300}-\u{1F5FF}\u{1F680}-\u{1F6FF}\u{1F1E0}-\u{1F1FF}]/gu,"")).replace(/^(.+?),/,((e,a)=>`Person ${function(e){if("You"===e.trim())return"S";if(t.has(e))return t.get(e);let a=e[0].toUpperCase();if(n.has(a)&&(a=e.split(" ").map((e=>e[0].toUpperCase())).join("")),n.has(a)){let e=2;for(;n.has(`${a}${e}`);)e++;a=`${a}${e}`}return t.set(e,a),n.set(a,e),a}(a)},`)))).join("\n")}(t[1].trim()):e}(t)},max:async()=>{const e=(await Mine.Ai.getResponseText(`\nReproduce the entire following text (in triple quotes) verbatim but instead of first person, make it a third party perspective as Max. leave everything else (including grammar, punctuation, casing, etc) as is. return just the text in a code block denoted by three tickmarks:\n"""\n${t}\n"""\n`.trim())).split("\n"),n=e=>e.trim().startsWith("```"),a=e.findIndex(n)+1,o=e.findLastIndex(n),s=e.slice(a,o).join("\n");t=s},p:async()=>o.push('answer, then add an hr and state "✨ <the answer in pretty format in one line>". if using google search, keep searching until you have a satisfactory rich answer to report.'),q:async()=>o.push("respond as concisely as possible"),n:async()=>o.push("respond normally"),v:async()=>o.push("elaborate")};for(let e=0;e<n.length;e++){const t=n[e];t in s&&await s[t]()}const i=o.length?"\n\nNote: "+o.join(". "):"",r=a(t," -"+n)+i;Mine.updateReactTypableFormValue(e,r)}},appendTaTextAsync=async(e,t)=>{const n=await MineTm.getTaAsync();return Mine.updateReactTypableFormValue(n,n.value?`${n.value}\n\n${e}`:e),Mine.qs('button:has([d="M12 7.59 7.05 2.64 5.64 4.05 12 10.41l6.36-6.36-1.41-1.41L12 7.59zM5.64 19.95l1.41 1.41L12 16.41l4.95 4.95 1.41-1.41L12 13.59l-6.36 6.36z"])')?.click(),n.blur(),n.scrollTo({top:n.scrollHeight,behavior:"smooth"}),t&&(await MineTm.getSendButtonAsync()).click(),!0},globalSelectorClickEventHandlers=new Map,bindOnSelectorClick=(e,t)=>{globalSelectorClickEventHandlers.size>0||["touchend","click"].forEach((e=>{document.body.addEventListener(e,(async e=>{for(const[t,n]of globalSelectorClickEventHandlers){const a=e.target.closest(t);a&&n.forEach((t=>t(a,e)))}}),{passive:!0})})),globalSelectorClickEventHandlers.has(e)||globalSelectorClickEventHandlers.set(e,new Set),globalSelectorClickEventHandlers.get(e).add(t)},origWindowScroll=window.scrollTo,origElemScroll=Element.prototype.scrollTo,origElemScrollIntoView=Element.prototype.scrollIntoView,origScrollTopDesc=Object.getOwnPropertyDescriptor(Element.prototype,"scrollTop"),defineScrollingFunctions=e=>{window.scrollTo=e?origWindowScroll:()=>{},Element.prototype.scrollTo=e?origElemScroll:()=>{},Element.prototype.scrollIntoView=e?origElemScrollIntoView:()=>{},Object.defineProperty(Element.prototype,"scrollTop",e?origScrollTopDesc:{set:e=>e,get:()=>0})};MineTm.turnOffJsScrollingInstantly=()=>defineScrollingFunctions(!1),MineTm.turnOnJsScrollingInstantly=()=>defineScrollingFunctions(!0);const installRemoteChatControlAsync=async(e=!1)=>{const t=await MineTm.getMinePluginBasedSecretAsync("pepperAppsApiKey"),n=await fetch("https://pepperpotts.fly.dev/apps/getData",{method:"POST",headers:{"Content-Type":"application/json","pepper-api-key":t},body:JSON.stringify({key:"chatStarterBuffer"})});if(!n.ok)return Mine.toastWarning(`Unable to fetch possible remote chat starter: HTTP error ${n.status}`);const a=await n.json();if(!a.success||!a.data)return Mine.toastWarning("Unable to fetch possible remote chat starter: No data available");const o=a.data,s=e=>atob(e),i=s(o.query),r=s(o.context);if(!(Date.now()-new Date(o.createdDate).getTime()<=5e3))return;if(!i&&r.startsWith("GO_TO_CHAT:")){const e=r.trim().split(":")[1];return e?await MineTm.getChatIndexedDbValueAsync(e)?void MineTm.goToChatIdWithHardReload(e):Mine.toastError(`Chat "${e}" not found`):void 0}if(e)return;let c=i;"discuss-with-tida"===r?await MineTm.startChatWithAgentFromHomeAsync("Tida"):r&&(c+=`\n\nContext:\n"""\n${r}\n"""`),(await MineTm.getTaAsync()).value||await appendTaTextAsync(c,!0)};installRemoteChatControlAsync(),isMobile&&document.addEventListener("visibilitychange",(()=>{document.hidden||installRemoteChatControlAsync(!0)})),Mine.quietQs('[data-element-id="ai-response"]:has(>details:only-child:not(.mine-thought))',{delayMs:0}),Mine.quietQs('[data-element-id="pinned-characters-container"]',{delayMs:0}),Mine.quietQs('[data-element-id="chat-date-info"]'),Mine.isi(`\n\n.post-message-content {display: none;}\n\n[data-element-id="workspace-tab-teams"] {display:none !important;}\n\n[id="elements-in-action-buttons"] > button, [data-element-id="config-buttons"] {scale: 0.8;}\n[id="elements-in-action-buttons"] {\n gap: 0.1rem;\n margin-bottom: ${isMobile?"28px":"0"};\n\n -webkit-user-select: none !important;\n user-select: none !important;\n}\n\n[data-element-id="ai-response"] hr {\n margin: 10px 0;\n}\n\n\n[data-element-id="chat-space-end-part"]:has([data-element-id="edit-message-label"]) > [role="presentation"] { overflow: hidden; }\n\n\n:root {\n --mine-bg-color: rgb(13,13,13);\n}\nbody {\n\t--workspace-color: black !important;\n\t--sidebar-color: black !important;\n}\n\n\n[data-element-id="chat-space-middle-part"] {\n background: var(--mine-bg-color);\n}\n[data-element-id="chat-space-end-part"] {\n border: 0;\n background: var(--mine-bg-color) !important;\n box-shadow: 0px 0px 10px 10px var(--mine-bg-color);\n}\n\n[data-element-id="chat-avatar-container"] {display: none;}\n[data-element-id="response-block"] {padding-left: 0.5rem;}\n\n\n[data-element-id="current-chat-title"] [aria-haspopup="menu"] .truncate {display: none;}\n\ndiv:has(>[data-element-id="chat-space-end-part"]) {\n padding: 0 23px;\n}\n\n@media (max-width: 900px) {\n div:has(>[data-element-id="chat-space-end-part"]) {\n padding: 0 9px 0 9px;\n }\n\n \n div:has(>[data-element-id="response-block"]) {\n padding-right: 9px;\n padding-left: 9px;\n }\n [data-element-id="current-chat-title"] > :first-child {gap: 0;}\n [data-element-id="response-block"] {padding-left: 0;}\n\n [data-element-id="search-shortcut-button"] {display: none;}\n [id="chat-input-textbox"] {padding-left: 10px;}\n\n .enter-to-send {display: none;}\n\n \n [data-element-id="chat-space-end-part"]:not(:has([data-element-id="edit-message-label"])) [data-element-id="message-input"] {margin-top: -20px;}\n\n #chat-input-textbox {padding: 7px;}\n [data-element-id="chat-input-textbox-container"] button {opacity: 0.7;}\n [data-element-id="response-block"] {padding:0;padding-top:10px;}\n}\n\ndiv:has(> div > img[src="/logo.png"]) {display: none;}\n.prose {\n background: rgb(39, 39, 42);\n border-radius: 16px;\n border-bottom-left-radius: 3px;\n padding: 10px;\n color: white;\n}\n[data-element-id="user-message"] {\n padding: 10px;\n border-radius: 16px;\n border-bottom-right-radius: 3px;\n}\n[data-element-id="response-block"]:has([data-element-id="user-message"]) [data-element-id="chat-avatar-container"] {display: none;}\n\ndiv:has(>.bg-blue-500) {\n display: flex;\n justify-content: flex-end;\n}\ndiv > button:has(.user-avatar) {visibility: hidden;}\n\nbody {background: var(--mine-bg-color) !important;}\n.response-block:hover {background: none !important;}\n\n\n.response-block li,\n.response-block p\n{\n border-radius: 5px;\n margin: 2px;\n padding-left: 2px;\n padding-right: 2px;\n}\n\n.response-block li, .response-block li *\n.response-block p, .response-block p *\n{\n color: white;\n transition: color 0.1s ease-in-out;\n}\n.response-block li:hover, .response-block li:hover *,\n.response-block p:hover, .response-block p:hover *\n{\n color: hotpink;\n transition: color 0s;\n}\ncode span {\n transition: color 0.1s ease-in-out;\n}\ncode span:hover {\n color: hotpink !important;\n transition: color 0s;\n}\n\n\n[data-element-id="ai-response"]:has([data-element-id="additional-actions-of-response-container"] button) {\n border-radius: 16px 16px 3px 3px;\n}\n[data-element-id="ai-response"]:has(>details:only-child) {\n border-radius: 3px 3px 16px 16px;\n margin-top: -20px;\n}\n\n.response-block li ul {margin-top: 0;}\n.response-block li:nth-child(even), .response-block p:nth-child(even) {background-color: RGBA(0,0,0,0.3);}\n\n[data-element-id="chat-space-end-part"] div:has(label) {display:none;}\n\ndiv:has(>.post-message-content) {margin-bottom: 100px;} \nbutton[aria-label="Open sidebar"] {margin-top:55px;}\n\n[data-element-id="chat-input-actions"] {\n padding-right: 2px;\n padding-bottom: 2px;\n} \n[data-element-id="chat-space-end-part"]>div:has(img) {margin-bottom:25px} \n\ndiv:has(>[data-element-id="send-button"]) {opacity: 0.2;}\n\n[data-element-id="chat-space-end-part"] div:has([data-element-id="message-input"]) {padding-bottom: 0;}\n.hide-when-print:has([data-element-id="chat-space-beginning-part"]) {height:0;} \n\n[data-element-id="push-pin-symbol"] {display:none;}\n[data-element-id="response-block"].is-pinned {\n background:transparent;\n margin-top:0;\n margin-bottom:0;\n}\n[data-element-id="ai-response"],\n[data-element-id="user-message"] {transition: box-shadow 0.1s;}\n.is-pinned [data-element-id="ai-response"],\n.is-pinned [data-element-id="user-message"] {box-shadow: inset 0 0 0 2px rgba(80, 200, 120, 0.8);}\n\npre:has(code):has(.sticky) {margin:0;}\ndiv:has(>.sticky):has(code) .sticky {\n background: darkslategrey;\n border-radius: 7px 7px 0 0;\n}\n[data-element-id="ai-response"] pre button {\n background:transparent !important;\n}\n\n[data-element-id="ai-response"],\n[data-element-id="user-message"] {\n max-width: 98%;\n}\n\n#chat-input-textbox {\n border-radius:9px;\n transition: background 0.1s, height 0.1s;\n}\n#chat-input-textbox:not(:focus):placeholder-shown {\n background: var(--mine-bg-color);\n}\n\n[data-element-id="chat-space-background"] {\n background: var(--mine-bg-color) !important;\n}\n\n[data-element-id="user-message"] {\n background: rgb(39 46 78);\n}\n\n#chat-input-textbox {\n background: #1a1a1a;\n}\n\n[aria-modal]:focus {\n outline: none !important;\n}\n\n\n[data-element-id="response-block"] + div:has(svg:not(.animate-spin)) {display:none;}\n[data-element-id="response-block"] + div:has(svg.animate-spin) {\n visibility: hidden;\n}\n[data-element-id="response-block"] + div:has(svg.animate-spin)::before {\n content: "thinking...";\n visibility: visible;\n font-style: italic;\n opacity: 0;\n position: relative;\n top: 43px;\n left: 25px;\n animation:\n show 0.5s 0.5s cubic-bezier(0.22, 0.61, 0.36, 1) forwards,\n shimmer 2s 1.5s infinite linear;\n background: linear-gradient(\n 90deg,\n #888 0%,\n #ccc 50%,\n #888 100%\n );\n background-size: 200% auto;\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n}\n@keyframes show {\n to {\n opacity: 1;\n top: 33px;\n }\n}\n@keyframes shimmer {\n to {\n background-position: -200% center;\n }\n}\n\n\n[data-element-id="response-block"] {\n em, p > strong:first-child {\n color: lightsteelblue;\n }\n li > strong:first-child {\n color: lightslategray;\n }\n}\n\n\n@keyframes borderFadeOut {\n from {\n border: 1px dashed rgba(255, 255, 255, 0.25);\n }\n to {\n border: 1px solid transparent;\n }\n}\n[data-element-id="ai-response"] {\n animation: borderFadeOut 0.2s forwards;\n}\n[data-element-id="streaming-block"] [data-element-id="ai-response"] {\n border: 1px dashed rgba(255, 255, 255, 0.25);\n animation: none;\n}\n\n\n\n\n\n`),Mine.quietQs('[data-element-id="ai-response"] pre button',{delayMs:0});let notifiedAboutContextSizeMaxed=!1;const installAttachMetaInfoV1Async=async()=>{const e=async()=>{const e=MineTm.getCurrentChatId();if(!e)return;const t=await MineTm.getChatIndexedDbValueAsync(e);t&&(await(async e=>{const t=Mine.qsaa('[data-element-id="current-chat-title"] button').reverse()[0];if(!t)return;const n="__mine_info_div",a=()=>Mine.qs(`#${n}`),o=a();if(!o){const e=document.createElement("div");e.id=n,e.style.opacity="0",e.style.transition="opacity 0.2s",t.parentNode.insertBefore(e,t),e.style.opacity="1"}const s=o||a();let i=e.chatParams.contextLimit;const r=e.messages.findLastIndex((e=>"clear-context"===e.type)),c=r>=0?e.messages.length-1-r:e.messages.length;0===i&&(i=1/0);const l=c>=i;s.innerHTML=`${c}/<span style='${l?"color:red;":""};'>${i===1/0?"∞":i} mc</span>`,notifiedAboutContextSizeMaxed&&!l&&(notifiedAboutContextSizeMaxed=!1),l&&!notifiedAboutContextSizeMaxed&&(Mine.toastWarning(`Context size reached (${e.messages.length}/${i})`),notifiedAboutContextSizeMaxed=!0)})(t),await(async()=>{if(isAiTyping())return;Mine.qsaa(".firstLookbackMessage.visible").forEach((e=>{e.classList.remove("firstLookbackMessage"),e.classList.remove("visible")}));const e=Mine.qsaa('[data-element-id="response-block"]').reverse();let{contextSize:t}=await MineTm.getCurChatIdbMetaAsync();if(t=Number(t),t<=e.length){const n=e[t-1],a=n?.closest('[data-element-id="response-block"]').parentElement;a&&(a.classList.add("firstLookbackMessage"),a.classList.add("visible"))}})())};document.addEventListener("refreshCurrentChatMeta",e),document.addEventListener("numMsgsInChatChanged",e)},installNumMsgsInChatChangedFirer=async()=>{(()=>{const e=IDBObjectStore.prototype.put;IDBObjectStore.prototype.put=function(...t){const n=e.apply(this,t);if("keyval"===this.name){const[e,n]=t;n.replace("CHAT_","")===MineTm.getCurrentChatId()&&document.dispatchEvent(new CustomEvent("numMsgsInChatChanged",{detail:{numMsgs:{key:e,value:n}.key.messages.length}}))}return n}})()};installNumMsgsInChatChangedFirer(),installAttachMetaInfoV1Async();const installPluginBreakfreeServerV1Async=async()=>{const e={SCRAPE:async({url:e})=>await window.mineScrapeUrlAsync(e),SEARCH:async({queries:e,lookbackDays:n})=>{for(let a=0;a<e.length;a++){const o=e[a],s=await t(o,n);if(s.length)return s}return[]}},t=async(e,t)=>{const n="keyval",a=[],o=new Date;return o.setDate(o.getDate()-t),new Promise(((t,s)=>{const i=indexedDB.open("keyval-store");i.onerror=e=>s(`IndexedDB error: ${e.target.error}`),i.onsuccess=i=>{const r=i.target.result.transaction([n],"readonly").objectStore(n).openCursor();r.onerror=e=>s(`Cursor error: ${e.target.error}`),r.onsuccess=n=>{const s=n.target.result;if(s){const t=s.value;if(s.key.startsWith("CHAT_")&&Array.isArray(t.messages)){const n=new RegExp(`\\b${e}\\b`,"i"),s=t.messages.filter((e=>"user"===e.role&&n.test(e.content)&&new Date(e.createdAt)>=o));if(n.test(t.chatTitle)){const e=t.messages.find((e=>"user"===e.role));e&&new Date(e.createdAt)>=o&&!s.some((t=>t.createdAt===e.createdAt))&&s.push(e)}const i=s.map((e=>({content:e.content,createdAt:e.createdAt}))).filter((e=>{const t=(new Date).toUTCString(),n=e.createdAt,a=new Date(t),o=new Date(n),s=a.getTime()-o.getTime(),i=Math.round(s/1e3);return!Math.abs(i<10)}));a.push(...i)}s.continue()}else t(a)}}}))},n=await MineTm.getMinePluginBasedSecretAsync("memoryPluginPassword"),a=(()=>{const e=new Uint8Array([99,114,121,112,116,111,115,97,108,116,49,50,51,52,53,54]),t=n;async function a(t){const n=(new TextEncoder).encode(t),a=await window.crypto.subtle.importKey("raw",n,{name:"PBKDF2"},!1,["deriveBits","deriveKey"]);return window.crypto.subtle.deriveKey({name:"PBKDF2",salt:e,iterations:1e5,hash:"SHA-256"},a,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}return{encrypt:async function(e){const n=await a(t),o=(new TextEncoder).encode(JSON.stringify(e)),s=window.crypto.getRandomValues(new Uint8Array(12)),i=await window.crypto.subtle.encrypt({name:"AES-GCM",iv:s},n,o);return{iv:Array.from(s),data:Array.from(new Uint8Array(i))}},decrypt:async function(e){const n=await a(t),o=await window.crypto.subtle.decrypt({name:"AES-GCM",iv:new Uint8Array(e.iv)},n,new Uint8Array(e.data));return JSON.parse((new TextDecoder).decode(o))}}})();window.addEventListener("message",(async t=>{const{encryptedData:o}=t.data;if(o)try{const s=await a.decrypt(o),{id:i,func:r,request:c}=s,l=async()=>{const e=await a.encrypt({id:i,error:"Function not found"});t.source.postMessage({encryptedError:e},"*")};if(!n)return alert('memory plugin password not found. start a new chat and send a message "memoryPluginPassword=<the-password-no-quotes>" with no quotes'),void await l();if("function"==typeof e[r]){const n=await e[r](c),o=await a.encrypt({id:i,result:n});t.source.postMessage({encryptedResult:o},"*")}else await l()}catch(e){console.error("Decryption error:",e)}}))};installPluginBreakfreeServerV1Async();const installSelectionPopoversAsync=async()=>{const e=e=>async({selectedText:t,isLongPressed:n})=>{const a=(o=e,`${MineTm.mapEachNonEmptyLine(t.trim(),(e=>`> ${e}`))}\n${o}`);var o;return await appendTaTextAsync(a,n)},t={elab:e("elaborate"),"?":e("?"),"👍🏻":e("👍🏻"),"👎🏻":e("👎🏻"),"🩶":e("🩶"),"“”":async({selectedText:t,isLongPressed:n})=>{const a=prompt(`> ${t}`);if(!a)return!1;const o=e(a);return await o({selectedText:t,isLongPressed:n})}},n=document.createElement("div");n.id="custom-popover",n.className="custom-popover",n.innerHTML=Object.keys(t).map((e=>`<button class="popover-button">${e}</button>`)).join(""),document.body.appendChild(n);const a=document.createElement("style");a.textContent="\n:root {\n --popover-bg: #333;\n --popover-text: #fff;\n --popover-active: #555;\n --popover-border: #444;\n}\n\n.custom-popover {\n display: none;\n position: fixed;\n background-color: var(--popover-bg);\n border-radius: 6px;\n box-shadow: 0 8px 19px rgba(0,0,0,0.6);\n padding: 2px;\n z-index: 1000;\n border: 1px solid var(--popover-border);\n opacity: 0;\n transition: opacity 0.1s ease-in-out;\n}\n\n.custom-popover::before {\n content: '';\n position: absolute;\n top: -8px;\n left: 50%;\n transform: translateX(-50%);\n border-left: 8px solid transparent;\n border-right: 8px solid transparent;\n border-bottom: 8px solid var(--popover-bg);\n z-index: 1001;\n}\n\n.custom-popover::after {\n content: '';\n position: absolute;\n top: -9px;\n left: 50%;\n transform: translateX(-50%);\n border-left: 9px solid transparent;\n border-right: 9px solid transparent;\n border-bottom: 9px solid var(--popover-border);\n z-index: 1000;\n}\n\n.custom-popover.show {\n opacity: 1;\n}\n\n.popover-button:hover {\n background: rgb(0,0,0,0.25);\n}\n\n.popover-button {\n background-color: transparent;\n border: none;\n color: var(--popover-text);\n font-size: 14px;\n padding: 6px 8px;\n margin: 0 2px;\n cursor: pointer;\n transition: background-color 0.1s;\n border-radius: 6px;\n}\n\n.popover-button:active {\n background-color: var(--popover-active);\n}\n ".trim(),document.head.appendChild(a);let o=null,s=!1;const i=()=>{s&&(n.classList.remove("show"),setTimeout((()=>{n.style.display="none",o=null,s=!1,r()}),100))},r=Mine.debounce((()=>{const e=window.getSelection();if(e.toString().length>0&&!s){o=e.toString();const t=e.getRangeAt(0),a=t.getBoundingClientRect();if(a.bottom<0||a.top>window.innerHeight||a.right<0||a.left>window.innerWidth)return;if(!(t.commonAncestorContainer.nodeType===Node.TEXT_NODE?t.commonAncestorContainer.parentElement:t.commonAncestorContainer).closest('[data-element-id="response-block"]'))return;n.style.display="flex",n.classList.remove("show"),s=!0,(e=>{const t=window.innerWidth,a=window.innerHeight;setTimeout((()=>{n.style.visibility="hidden",n.style.display="flex";const o=n.getBoundingClientRect();let s=e.left+(e.width-o.width)/2,i=e.bottom+10;(i<=0||i>=a)&&(i=a/2);const r=()=>{s+o.width>t&&(s=t-o.width-10),s<10&&(s=10),i+o.height>a&&(i=e.top-o.height-10),i<10&&(i=10),i+=10,n.style.left=`${s}px`,n.style.top=`${i}px`;const c=n.getBoundingClientRect();(c.right>t||c.bottom>a)&&r()};r(),n.style.visibility="visible",n.classList.add("show")}),50)})(a)}else 0!==e.toString().length||n.contains(document.activeElement)||i()}),150);document.addEventListener("mouseup",r),document.addEventListener("touchend",r),document.addEventListener("mousedown",(e=>!n.contains(e.target)&&i())),document.addEventListener("scroll",(e=>!n.contains(e.target)&&i())),document.addEventListener("touchstart",(e=>!n.contains(e.target)&&i())),n.addEventListener("touchstart",(e=>e.preventDefault())),setTimeout((()=>{const e=Mine.throttle(i,200);Mine.qs('[data-element-id="chat-space-middle-part"]').addEventListener("scroll",(()=>e()))}),1e3),n.querySelectorAll(".popover-button").forEach((e=>{let n=!1;const a=async n=>{const a=e.textContent.toLowerCase(),s=o;let r=!1;t[a]&&(r=await t[a]({selectedText:s,isLongPressed:n})),r&&i()},s=((e,t=500)=>{let n,a=!1;return{start:o=>{a=!1,n=setTimeout((()=>{a=!0,e(!0)}),t)},cancel:()=>{clearTimeout(n)},isLongPressDetected:()=>a}})((()=>a(!0))),r=async e=>{e.preventDefault(),e.stopPropagation(),"touchend"===e.type&&(n=!0),"click"===e.type&&n||(s.cancel(),s.isLongPressDetected()||await a(!1))};e.addEventListener("touchstart",(e=>{e.preventDefault(),s.start(e)})),e.addEventListener("touchend",r),e.addEventListener("touchcancel",s.cancel),e.addEventListener("mousedown",s.start),e.addEventListener("click",r),e.addEventListener("mouseleave",s.cancel)})),document.addEventListener("click",(e=>{1===e.detail&&(r(),setTimeout((()=>r()),500)),3===e.detail&&setTimeout((()=>r()),500)}))};setTimeout(installSelectionPopoversAsync,1e3);const installPluginsNoiseHiderAsync=async()=>{bindOnSelectorClick('[data-element-id="chat-space-beginning-part"] button:has([d="M11.25 5.337c0-.355-.186-.676-.401-.959a1.647 1.647 0 01-.349-1.003c0-1.036 1.007-1.875 2.25-1.875S15 2.34 15 3.375c0 .369-.128.713-.349 1.003-.215.283-.401.604-.401.959 0 .332.278.598.61.578 1.91-.114 3.79-.342 5.632-.676a.75.75 0 01.878.645 49.17 49.17 0 01.376 5.452.657.657 0 01-.66.664c-.354 0-.675-.186-.958-.401a1.647 1.647 0 00-1.003-.349c-1.035 0-1.875 1.007-1.875 2.25s.84 2.25 1.875 2.25c.369 0 .713-.128 1.003-.349.283-.215.604-.401.959-.401.31 0 .557.262.534.571a48.774 48.774 0 01-.595 4.845.75.75 0 01-.61.61c-1.82.317-3.673.533-5.555.642a.58.58 0 01-.611-.581c0-.355.186-.676.401-.959.221-.29.349-.634.349-1.003 0-1.035-1.007-1.875-2.25-1.875s-2.25.84-2.25 1.875c0 .369.128.713.349 1.003.215.283.401.604.401.959a.641.641 0 01-.658.643 49.118 49.118 0 01-4.708-.36.75.75 0 01-.645-.878c.293-1.614.504-3.257.629-4.924A.53.53 0 005.337 15c-.355 0-.676.186-.959.401-.29.221-.634.349-1.003.349-1.036 0-1.875-1.007-1.875-2.25s.84-2.25 1.875-2.25c.369 0 .713.128 1.003.349.283.215.604.401.959.401a.656.656 0 00.659-.663 47.703 47.703 0 00-.31-4.82.75.75 0 01.83-.832c1.343.155 2.703.254 4.077.294a.64.64 0 00.657-.642z"])',(async()=>{await Mine.waitForQs('[data-element-id="current-chat-title"] [role="menuitem"]'),await MineTm.getAnimationFrameAsync();const e=Mine.qsaa('[data-element-id="current-chat-title"] [role="menuitem"]');e.forEach((e=>e.style.display=""));const t=["Web Search","Bin entries search","Bin Project Add Note","Bin Project Search-ish","Bin Project Details","[DEMO] Google Maps","Query screenshot","TaskPaper active doc","TypingMind","Mermaid Diagram","LocalCoder","Domain checker","Search Google knowledge graph","JavaScript Interpreter","Perplexity Search","DALL-E 3","Simple Calculator","Stable Diffusion v2 Image","Stable Diffusion v3 Image","Image Search","Web Page Reader","Market News","Azure AI Search","Render Chart","Render HTML"].map((e=>e.toLowerCase()));e.filter((e=>t.some((t=>e.innerText.toLowerCase().includes(t.toLowerCase()))))).forEach((e=>e.style.display="none"))}),{mustBeExactElement:!0})};setTimeout(installPluginsNoiseHiderAsync,1e3),isMobile&&Mine.isi('\n[data-element-id="send-button"] {\n -webkit-user-select: none !important;\n user-select: none !important;\n\n width:fit-content;\n overflow:hidden;\n border-radius:5px;\n padding:4px;\n}\n\ndiv:has(>[data-element-id="send-button"]) > div {display:none;}\ndiv:has(>[data-element-id="send-button"]) {\n position: absolute;\n bottom: 1px;\n right: 1px;\n}\n'),Mine.isi('form[action="https://codepen.io/pen/define"] {display: none !important;}'),isMobile||(Mine.isi('\n[data-element-id="message-input"] .pt-2 {\n padding-top: 0;\n}\n\n/* voice recognition dialog */\n[data-element-id="pop-up-modal"]:has(option[value="en-AU"]) {\n right: 10px;\n top: 100px;\n position: absolute;\n transform: scale(0.7);\n transform-origin: top left;\n}\n'),Mine.quietQs('a[href="https://custom.typingmind.com"]'),Mine.isi('[data-element-id="response-block"] div:has(>audio):has(button), [data-element-id="response-block"] div:has(>[data-element-id="in-message-play-button"]) {display: none;}'),Mine.isi('\n[data-element-id="ai-characters-system-instruction-input"] {\n height: 300px;\n}\n\n.enter-to-send {display:none;}\n\n[data-headlessui-state] button {\n border-radius: 10px;\n}\n\n.firstLookbackMessage:before {\n margin-bottom: 10px;\n content: "——— context lookback starts ———";\n opacity: 0;\n display: block;\n text-align: center;\n color: gray;\n font-style: italic;\n transition: opacity 0.25s ease-in-out;\n}\n.firstLookbackMessage.visible:before {\n opacity: 0.5;\n}\n\n/* pretty tables */\ntable {\n padding: 2px;\n}\ntable thead {\n background-color: rgba(0, 0, 0, 0.2);\n}\ntable tr td:first-child {\n background-color: rgba(0, 0, 0, 0.2);\n}\n\n[data-element-id="response-block"] td,\n[data-element-id="response-block"] th {\n padding: 6px !important;\n}\n\ntable tr:hover {\n background-color: rgba(0, 0, 0, 0.4) !important;\n}\ntable tr:nth-child(even) {\n background-color: rgba(0, 0, 0, 0.1);\n}\ntable tr th:first-child,\ntable tr td:first-child {\n padding: 10px;\n}\n')),Mine.isi(".transition {transition-duration: 0s !important;}");const ensureSidebarClosedAsync=async()=>{getIsSideBarOpen()&&(document.body.clientWidth>1e3?(await MineTm.getSidebarToggleEleAsync()).click():Mine.qs('button:has([d="M6 18L18 6M6 6l12 12"])')?.click())},stopAiResponseAsync=async()=>{const e=await MineTm.getTaAsync(),t=e.value;t&&Mine.updateReactTypableFormValue(e,""),await Mine.getAnimationFrameAsync(),await MineTm.maybeClickStopButtonAsync(),t&&Mine.updateReactTypableFormValue(e,t),await Mine.sleep(100)},getIsSideBarOpen=()=>0===Mine.qs("#navbar")?.getBoundingClientRect().left,navigateMessageInDirection=e=>{const t=MineTm.getAllChatMsgEles();let n=t.findIndex((e=>{const t=e.getBoundingClientRect();return t.top>=0&&t.top<window.innerHeight}));-1===n&&(n=0),n="up"===e?(n-1+t.length)%t.length:(n+1)%t.length,t[n]?.scrollIntoView({behavior:"smooth"})},cssForAttachmentIconWrapper='div:has(>svg):has([d="M43.246 466.142c-58.43-60.289-57.341-157.511 1.386-217.581L254.392 34c44.316-45.332 116.351-45.336 160.671 0 43.89 44.894 43.943 117.329 0 162.276L232.214 383.128c-29.855 30.537-78.633 30.111-107.982-.998-28.275-29.97-27.368-77.473 1.452-106.953l143.743-146.835c6.182-6.314 16.312-6.422 22.626-.241l22.861 22.379c6.315 6.182 6.422 16.312.241 22.626L171.427 319.927c-4.932 5.045-5.236 13.428-.648 18.292 4.372 4.634 11.245 4.711 15.688.165l182.849-186.851c19.613-20.062 19.613-52.725-.011-72.798-19.189-19.627-49.957-19.637-69.154 0L90.39 293.295c-34.763 35.56-35.299 93.12-1.191 128.313 34.01 35.093 88.985 35.137 123.058.286l172.06-175.999c6.177-6.319 16.307-6.433 22.626-.256l22.877 22.364c6.319 6.177 6.434 16.307.256 22.626l-172.06 175.998c-59.576 60.938-155.943 60.216-214.77-.485z"])',main=async()=>{const verticalMoreIconPath="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z",stopIconPath="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z",cssDesktop=`\n/*${Mine.getCssToHide('[data-element-id="input-row"] div:has([data-element-id="prompt-library-small-button"])')}*/\n${Mine.getCssToQuietQs('[data-element-id="current-chat-title"]',{delayMs:0})}\n\n${cssForAttachmentIconWrapper} {cursor:pointer;}\ntextarea[data-element-id="new-system-instruction"],\ntextarea[placeholder*="Function Spec"],\ntextarea[placeholder*="JS code"]\n{\n font-family: Courier New;\n height: 400px;\n}\n\n.pb-safe:focus {outline:none;}\n\ndiv:has(>[data-element-id="send-button"]) {display: none;}\n[data-element-id="main-page-buttons-containter"] button {\n opacity: 0.2;\n transition: opacity 0.2s !important;\n}\n[data-element-id="main-page-buttons-containter"] button:hover {opacity: 1;}\n\n[data-element-id="user-message"] {\n max-height: 502px;\n}\n\n[data-element-id="response-block"]:has([data-element-id="model-setting-info"]) {\n border: 1px solid rgba(255,255,255,0.3);\n opacity: 0.25;\n margin-bottom: 25px;\n}\n\n[data-element-id="width-adjust-bar"] {display: none;}\n\n/* typing animation */\n[data-element-id="response-block"]:not(:has([d="${verticalMoreIconPath}"])) div[data-element-id="ai-response"] p:last-of-type:after {\n animation: blink 1s steps(5,start) infinite;\n content: "▋";\n vertical-align: baseline;\n}\n@keyframes blink {\n 0% {opacity: 1}\n 50% {opacity: 0}\n to {opacity: 1}\n}\n\n\nbutton:has(polyline[points="5.5 12.25 2.25 9 5.5 5.75"]) {\n margin-top: 55px;\n}\n\n/* context limit reached buton */\n[data-element-id="chat-space-middle-part"] .text-right button {display:none;}\n\n/* fix janky where it bounces down after responding. */\n/* fixed with my scroll override changes i think */\n/*[data-element-id="response-block"]:has([data-element-id="edit-message-button"]) {\n margin-bottom: 25px;\n}\n*/\n\n[data-element-id="chat-space-middle-part"] {\n padding-bottom: 126px !important; /* when resuming a chat, it jumps bc it gets a wierdly tall margin */\n}\n\n/* stop button */\n[data-element-id="chat-space-background"] button:has([d="${stopIconPath}"]) {display:none;}\n\n.sticky div:has(>a[href^="https://blog.typingmind.com/"]) {\n visibility: hidden;\n}\nbutton:has([d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5"]):focus {outline:none;}\n#nav-buy-button {display:none;}\n#chat-input-textbox {\n padding-left: 12px;\n}\n#chat-input-textbox + button {display:none;}\n.transition-all {\n transition-property: none !important;\n}\n\n.user-avatar {\n background: black;\n}\n\ndiv:has(>.pb-safe) {\n border-bottom-width: 0;\n border-top-left-radius: 10px;\n border-top-right-radius: 10px;\n opacity: 1;\n transition: opacity 0.2s;\n}\ndiv:has(>.pb-safe):focus-within,\ndiv:has(>.pb-safe):hover{\n opacity: 1;\n}\n\nbutton[data-element-id="output-settings-button"] {display:none;}\n `.trim();isMobile||Mine.isi(cssDesktop);const addHotkeysAsync=async()=>{document.addEventListener("keypress",(async e=>{if("body"!==e.target.tagName.toLowerCase())return;const t=async(e,{focusAfter:t=!0,send:n=!1}={})=>{const a=await MineTm.getTaAsync(),o=a.value.trimEnd(),s=`${o?`${o}\n\n`:""}${e}`;if(n)return await MineTm.sendMessageAsync(s),void(t&&a.focus());Mine.updateReactTypableFormValue(a,s),t?(a.focus(),a.setSelectionRange(a.value.length,a.value.length)):a.scrollTo({top:a.scrollHeight,behavior:"smooth"})},n=t=>{if(!MineTm.isEventModifierFree(e))return;const n=window.getSelection()?.toString().trim().replace(/:$/,"");n&&window.open(t(encodeURIComponent(n)))},a={"/":()=>MineTm.isEventModifierFree(e)&&MineTm.getTaAsync().then((e=>e.focus())),k:()=>MineTm.isEventModifierFree(e)&&navigateMessageInDirection("up"),j:()=>MineTm.isEventModifierFree(e)&&navigateMessageInDirection("down"),l:async()=>MineTm.isEventModifierFree(e)&&await MineTm.scrollToLastMsgAsync(),a:()=>n((e=>`https://www.amazon.com/s?k=${e}`)),i:()=>n((e=>`https://www.google.com/search?q=${e}&udm=2`)),g:()=>n((e=>`https://www.google.com/search?q=${e}`)),e:async()=>{const n=document.getSelection()?.toString();if(!n)return;e.preventDefault();const a=MineTm.mapEachNonEmptyLine(n.trim(),(e=>`> ${e}`)),o=e.shiftKey&&!(e.altKey||e.ctrlKey||e.metaKey);await t(a+"\nelaborate",{focusAfter:!1,send:o})},q:async()=>{if(!MineTm.isEventModifierFree(e))return;e.preventDefault();const n=document.getSelection()?.toString();if(!n)return;const a=MineTm.mapEachNonEmptyLine(n.trim(),(e=>`> ${e}`));await t(a+"\n")}},o=e.key.toLowerCase();o in a&&await a[o](e)}))};setTimeout(addHotkeysAsync,500);const installArgumentRunnerAsync=async()=>{isMobile&&Mine.attachToElementContinuously((async()=>await Mine.waitForQs('[data-element-id="send-button"]',{recheckIntervalMs:1e3,timeoutMs:1/0})),(async e=>{e.addEventListener("touchend",(async()=>{await postProcessTaForSubmissionAsync(),(await MineTm.getSendButtonAsync()).click(),(await MineTm.getTaAsync()).blur()}))}));let e=!1;const t=()=>Mine.attachToElementContinuously(MineTm.getTaAsync,(async t=>{t.addEventListener("keydown",(async e=>{if(e.metaKey&&e.shiftKey&&"Enter"===e.key)return e.preventDefault(),void await clickTaMaybeSubmitButtonWithPluginsEnabledEphemerallyAsync();if(MineTm.isEventModifierFree(e)){if("Escape"===e.key)return MineTm.isEventModifierFree(e)&&t.closest(".editing")?(Mine.updateReactTypableFormValue(t,""),void e.preventDefault()):await stopAiResponseAsync();if("Enter"===e.key){if(isMobile)return;MineTm.getIsAiResponding()&&await stopAiResponseAsync(),await postProcessTaForSubmissionAsync(),(await MineTm.getSendButtonAsync()).click()}}}));const n=()=>{let e=Mine.qs('[data-element-id="current-character"]')?.innerText.split("\n")[0]||Mine.qs('[data-element-id="current-chat-title"] button[aria-haspopup="menu"] .truncate')?.innerText?.split(" ")[0]||"";e.endsWith(":")&&(e=e.substring(0,e.length-1)),t.placeholder=`Message ${e}`.trim()};["blur","focus"].forEach((e=>t.addEventListener(e,(()=>requestAnimationFrame(n))))),n(),t.addEventListener("blur",(async()=>{await Mine.getAnimationFrameAsync();const e=document.activeElement;e&&['[data-element-id="search-input"]','[placeholder="Search AI agents..."]'].some((t=>e.matches(t)))&&(Mine.simulateClick(t),t.focus())})),t.addEventListener("paste",(e=>{const n=e.clipboardData.files;if(n.length){e.preventDefault();const a=new DataTransfer;Array.from(n).forEach((e=>a.items.add(e)));const o=new DragEvent("drop",{bubbles:!0,cancelable:!0,dataTransfer:a});return void t.dispatchEvent(o)}const a=t.selectionStart;if(0!==a&&"\n"!==t.value[a-1])return;let o=(e.clipboardData||window.clipboardData).getData("text");if(o.length>32e3)return;var s;if(s=o.replace(/^"""\n?/,"").replace(/"""$/,""),o=s.trimEnd().replace(/^[\n\r]+/,""),!o?.trim())return;e.preventDefault();const i=`"""\n${o}\n"""\n\n`;t.focus(),document.execCommand("insertText",!1,i),t.scrollTo({top:t.scrollHeight,behavior:"smooth"})})),t.addEventListener("keydown",(async e=>{if(!t.value)return;if(!e.metaKey)return;const n=t.value,a=t.selectionStart,o=t.selectionEnd,s=a!==o;if(e.metaKey&&"l"===e.key){e.preventDefault();const s=n.substring(0,a),i=(n.substring(o),s.lastIndexOf("\n")+1),r=n.indexOf("\n",o),c=-1===r?n.length:r+1;if(a===i&&o===c){const e=n.indexOf("\n",c);t.setSelectionRange(a,-1===e?n.length:e+1)}else t.setSelectionRange(i,c)}else if(e.metaKey&&"x"===e.key){if(s)return;e.preventDefault();const o=n.substring(0,a).lastIndexOf("\n")+1,i=n.indexOf("\n",a),r=-1===i?n.length:i+1,c=n.substring(o,r);await Mine.Extension.copyText(c),t.setSelectionRange(o,r),document.execCommand("delete"),t.setSelectionRange(o,o)}})),e||(setTimeout((()=>document.dispatchEvent(new CustomEvent("refreshCurrentChatMeta"))),1e3),Mine.isi('\ntextarea::placeholder {color: #757575 !important;}\n[data-element-id="chat-space-end-part"]{opacity: 1;}\n'),t.focus(),e=!0)}),{onElementNotFound:async()=>setTimeout((()=>t()),500)});t()};setTimeout(installArgumentRunnerAsync,500);const onSpaUrlChangeCallbacks=[],bindOnSpaUrlChangeAsync=async e=>{if(!onSpaUrlChangeCallbacks.length){const e=history.pushState,t=history.replaceState,n=()=>onSpaUrlChangeCallbacks.forEach((e=>e()));history.pushState=function(){e.apply(this,arguments),n()},history.replaceState=function(){t.apply(this,arguments),n()},window.addEventListener("popstate",n)}onSpaUrlChangeCallbacks.push(e)};bindOnSpaUrlChangeAsync((()=>setTimeout((()=>document.dispatchEvent(new CustomEvent("refreshCurrentChatMeta"))),500))),bindOnSpaUrlChangeAsync((()=>setTimeout(installHomepageMenuAsync,500))),bindOnSpaUrlChangeAsync((()=>setTimeout(enrichAllMessagesIdempotentlyAsync,1e3))),bindOnSpaUrlChangeAsync((()=>notifiedAboutContextSizeMaxed=!1));const initTitleSanitizerServiceAsync=async()=>{const e=["TypingMind.com","TypingMind"];let t=document.title;const n=t=>{const n="TM";if(window.location.href===window.location.origin+"/")return n;if(t.includes(" — The best chat UI for AI"))return n;if(t.includes(" — LLM Frontend Chat UI for AI models"))return n;let a=e.reduce(((e,t)=>{const n=new RegExp("( - )?"+t,"gi");return e.replace(n,"")}),t);return a.trim()||(a=n),a};Object.defineProperty(document,"title",{get:function(){return t},set:function(e){const a=n(e);t=a,document.querySelector("title").textContent=a},configurable:!0}),document.title=n(t)};initTitleSanitizerServiceAsync(),Mine.isi("\n.fade-color-transition {\n transition: color 0.2s ease-in-out;\n}\npre:has(>code) {\n border: 1px solid RGBA(100,100,100,1);\n border-radius: 0 0 7px 7px !important;\n border-color: darkslategray;\n background: rgb(0,0,0,0.4) !important;\n}\n");const selectElementText=e=>{const t=window.getSelection(),n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)};document.body.clientWidth<1e3&&await ensureSidebarClosedAsync();const processItemsTickAsync=async()=>{Mine.processUnprocessedItems(Mine.qsaa("code.inline"),(async e=>{e.classList.add("fade-color-transition"),e.style.color=e.innerText?.includes(" ")?"gray":await Mine.getHashedStringToHexAsync(e.innerText,getComputedStyle(e).backgroundColor),e.addEventListener("click",(()=>selectElementText(e)))}),"code"),Mine.processUnprocessedItems(Mine.qsaa('[data-element-id="ai-response"] li'),(e=>e.addEventListener("click",(t=>{t.offsetX>=0||selectElementText(e)}))),"list"),Mine.processUnprocessedItems(Mine.qsaa('[data-element-id="ai-response"] strong'),(e=>e.addEventListener("click",(t=>selectElementText(e)))),"bolded"),Mine.processUnprocessedItems(Mine.qsaa('[data-element-id="user-message"] img, [data-element-id="ai-response"] img'),(e=>{e.addEventListener("click",(()=>{const t=e.getAttribute("src");t.startsWith("http")?window.open(t):fetch(t).then((e=>e.blob())).then((e=>{const t=URL.createObjectURL(e);window.open(t,"_blank")})).catch((e=>console.error("Error opening image:",e)))})),e.style.cursor="pointer"}),"img")};Mine.setIntervalAndNow(processItemsTickAsync,1e3);const[maybeMineCharKey,maybeMineCharVal]=window.location.hash.slice(1).split("=");if("mine_char"===maybeMineCharKey&&maybeMineCharVal){const[e,t]=maybeMineCharVal.split(",");await MineTm.startChatWithAgentFromHomeAsync(e),"q"!==t&&(await Mine.sleep(1e3),e.startsWith("Pepper")&&Mine.CommandBarBridge.execute("🎧 Call-in"))}Mine.bindHotkey("`",document,(async e=>{["INPUT","TEXTAREA"].includes(document.activeElement?.tagName)||(Mine.qs('[data-element-id="workspace-tab-chat"]')?.click(),(await MineTm.getSidebarToggleEleAsync()).click())})),Mine.bindHotkey("Escape",document,(async e=>await stopAiResponseAsync()));const createWorkerExecutor=()=>{const e=new Blob(["\n self.onmessage = (e) => {\n const logs = [];\n self.console.log = (...args) => logs.push(args.join(' '));\n try {\n (new Function(e.data))();\n self.postMessage(logs);\n } catch (error) {\n self.postMessage({ error: error.message });\n }\n };\n "],{type:"application/javascript"}),t=URL.createObjectURL(e),n=new Worker(t);return{execute:e=>new Promise(((a,o)=>{n.onmessage=e=>{e.data.error?o(e.data.error):a(e.data.join("\n")),n.terminate(),URL.revokeObjectURL(t)},n.onerror=e=>{o(e.message),n.terminate(),URL.revokeObjectURL(t)},n.postMessage(e)})),terminate:()=>{n.terminate(),URL.revokeObjectURL(t)}}},runCodeAsync=async e=>{const t=createWorkerExecutor();try{return await t.execute(e)}catch(e){throw e}finally{t.terminate()}},finalizedResponseBlocksQs='[data-element-id="response-block"]:not([data-element-id="streaming-block"] [data-element-id="response-block"])',runCodeInlineAndGetLogs=async code=>{const logs=[];try{return await eval(`\n(async function(){\n const console = {\n log: function(...args) {\n logs.push('[LOG] '+ args.map(arg => String(arg)).join(' '));\n },\n error: function(...args) {\n logs.push('[ERROR] ' + args.map(arg => String(arg)).join(' '));\n }\n };\n ${code}\n})();\n`),logs.join("\n")}catch(e){return logs.push("[ERROR] "+e.toString()),Mine.toastWarning("Run errored"),console.error(e),logs.join("\n")}},getMaybeSelectionInElement=e=>{const t=window.getSelection(),n=t.rangeCount>0?t.getRangeAt(0):null;return n&&e.contains(n.commonAncestorContainer)?{hasSelection:!0,selectedText:t.toString(),range:n}:null};Mine.puic((()=>Mine.qsaa(`${finalizedResponseBlocksQs} [data-element-id="ai-response"] .sticky`)),(e=>{const t={"⊕ Absorb":{supportedLanguageIds:["javascript"],classname:"absorb-code-btn",run:async({code:e,selectedCode:t=""})=>{let n=e;if(t){const e=t.split("\n");if(e.length<=1)return Mine.toastWarning("[Absorb] [noop] Selection too small"),!1;let a=0,o=e.length-1;for(;a<=o&&!e[a].trim();)a++;for(;o>=a&&!e[o].trim();)o--;const s=e.slice(a,o+1),i=e=>e.match(/^\s*/)[0].length;if(i(s[0])!==i(s[s.length-1]))return Mine.toastWarning("[Absorb] Start/end indent mismatch. Ensure selection contains entire lines (spaces will be handled)."),!1;const r=s.filter((e=>e.trim())).reduce(((e,t)=>Math.min(e,i(t))),1/0);n=s.map((e=>e.slice(r))).join("\n")}try{const e=await fetch("http://localhost:3001/absorb-code",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:n})});if(!e.ok)return!1;const t=await e.json();return t.success?(t.message&&Mine.toastSuccess(`[Absorb] ${t.message}`),!0):(Mine.toastError(`[Absorb failed] ${t.message}`),!1)}catch{return Mine.toastError("[Absorb failed] Could not complete"),!1}}},"▶️ Exec & reply":{supportedLanguageIds:["javascript"],classname:"exec-and-reply-btn",run:async({code:e})=>{const t={remote:Mine.RemoteExec?.execAtControlAsync,local:runCodeInlineAndGetLogs},n=Object.keys(t).find((e=>!!t[e])),a=t[n];let o=n;const s=await a(e).then((e=>"local"===n?e.trim():"remote"===n?(o=e.medium,e.output.trim()):void 0)).catch((e=>(Mine.toastError(e),null)));s||(s="[Execution produced no logs]");const i=await MineTm.getTaAsync(),r=`\nExecution results (via eval on ${o} site):\n"""\n${s}\n"""\n`.trim();Mine.updateReactTypableFormValue(i,r),(await MineTm.getSendButtonAsync()).click()}}},n=e.querySelector("button")?.classList?.toString();Object.entries(t).filter((([t,n])=>n.supportedLanguageIds.some((t=>e.innerText.includes(t))))).forEach((([t,a])=>{const o=document.createElement("button");o.className=`${a.classname||""} ${n??""}`.trim(),o.textContent=t,o.addEventListener("click",(async()=>{o.disabled=!0,o.style.fontStyle="italic",o.style.cursor="progress";const t=e.parentElement.querySelector("code"),n=t.innerText,s=getMaybeSelectionInElement(t),i=s?.selectedText;await a.run({code:n,selectedCode:i}),o.disabled=!1,o.style.fontStyle="",o.style.cursor=""})),e.appendChild(o)}))})),Mine.puic((()=>Mine.qsaa(`${finalizedResponseBlocksQs} [data-element-id="ai-response"]`)),(async e=>{(()=>{const t=e.innerHTML;if(!t.trim().startsWith("<think>"))return;const n=t.replace(/<think>([\s\S]*?)<\/think>/g,((e,t)=>`\n <details class="mine-thought" style="padding-bottom:10px;">\n <summary style="cursor: pointer;">Thought process</summary>\n <div style="color: #777">${t}</div>\n </details>\n `.trim()));e.innerHTML=n})()})),Mine.puic((()=>Mine.qsaa('[data-element-id="ai-response"] code')),(async e=>{const t=e.closest("*:has(.sticky)")?.querySelector(".sticky");if(!t)return;const n=t.innerText.trim().split("\n");(1===n.length||["txt","markdown","md"].includes(n[0]))&&(e.style.whiteSpace="break-spaces")})),Mine.puic((()=>Mine.qsaa(`${finalizedResponseBlocksQs} code`)),(async e=>{const t=e.closest("*:has(.sticky)")?.querySelector(".sticky");if(!t)return;const n=t.innerText.trim().split("\n");if(1===n.length||["txt","markdown","md"].includes(n[0]))return void(e.style.whiteSpace="break-spaces");const a=e.innerText.trim();if([".createElement","<script","<html"].some((e=>a.includes(e))))return;const o=a.split("\n");let s=o[o.length-1];if(s.startsWith("let ")||s.startsWith("const ")||s.match(/^[a-zA-Z0-9]+\s?=/)){const e=s.split("=")[0].split(" ").filter((e=>!!e.trim())).pop();s=`console.log(${e})`,o.push(s)}if(s.startsWith("console.log(")){const t="mine_code_output";let n;try{n=await runCodeAsync(o.join("\n"))}catch(a){if(a.toString().startsWith("ReferenceError:")||a.toString().split("\n")[0].trim().endsWith(" is not defined"))try{const a=[...e.closest('[data-element-id="response-block"]').querySelectorAll(`code:not(.${t})`)],s=[];for(const t of a){if(t===e)break;s.push(t.innerText)}const i=s.join("\n")+"\n\n"+o.join("\n");n=await runCodeAsync(i)}catch(e){}}if(n){const a=document.createElement("code");a.classList.add(t),a.style="font-size: 12.25px; display: block; font-style: italic; color: gray; border-top: 1px solid gray; margin-top: 10px; opacity: 0; transition: opacity 0.2s ease-in-out;",a.innerHTML=`${n}`,e.after(a),requestAnimationFrame((()=>{requestAnimationFrame((()=>{a.style.opacity=1}))}))}}})),isMobile||installNotesV3Async(),window.addEventListener("beforeunload",stopAiResponseAsync)},installNotesV3Async=async()=>{const e=document.createElement("div");e.innerHTML='\n<style>\n .mine_notes:not(:placeholder-shown) {\n right: -2px;\n height: calc(100vh - 60px - 100px);\n }\n .mine_notes:focus {\n opacity: 1;\n right: -2px;\n outline: none !important;\n box-shadow: none !important;\n }\n .mine_notes {\n transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n cursor: pointer;\n opacity: 0.2 !important;\n line-height: 1.1em;\n padding: 7px;\n position: fixed;\n right: -12.9%;\n top: 60px;\n background: rgb(39, 39, 42);\n color: white;\n width: 15%;\n border-radius: 10px 0 0 10px;\n border-width: 2px;\n height: 36px;\n resize: none;\n }\n .mine_notes:hover {\n opacity: 1 !important;\n }\n</style>\n<textarea class="mine_notes" placeholder="📝 Notes..." title="[M] Notepad"></textarea>\n',document.body.append(e);const t=e.querySelector(".mine_notes"),n="mine_notes",a=()=>t.value=localStorage.getItem(n)||"";a();const o=Mine.debounce((()=>{localStorage.setItem(n,t.value),requestAnimationFrame((()=>t.style.borderColor="green"))}),500);t.addEventListener("input",(()=>{t.style.borderColor="orange",o()})),window.addEventListener("storage",(e=>{e.key===n&&a()}))},unloadMaybeLoadingStyler=()=>Mine.qs("#mine_loader_styler")?.remove();isMobile?unloadMaybeLoadingStyler():([680,748,831].includes(document.body.clientWidth)||MineTm.getSidebarToggleEleAsync().then((async e=>{e.click(),unloadMaybeLoadingStyler()})),window.addEventListener("resize",ensureSidebarClosedAsync)),main();const installCustomConfigItemsAsync=async()=>{let uncollapseAiResponsesFn;bindOnSelectorClick('[data-element-id="config-buttons"]',(async()=>{const menu=await Mine.waitForQs('#elements-in-action-buttons [id^="headlessui-menu-items-"]'),myMenuWrapperId="mine-config-addons";if(menu.querySelector(`#${myMenuWrapperId}`))return;const newDiv=document.createElement("div");newDiv.id=myMenuWrapperId,newDiv.style="border-top: 1px solid rgba(255,255,255,0.15);padding-top: 10px;padding-bottom:5px;overflow:auto;max-height:300px;";const buttonConfigs=[null,isMobile?{html:'<button id="mine-debug-eval" class="mine-menu-btn">eval()</button>',loader:async()=>{menu.querySelector("#mine-debug-eval").addEventListener("click",(()=>{const p=prompt("Enter javascript to eval()");function exec(code){try{return eval(code)}catch(e){return console.error("Execution error:",e),e.toString()}}p?.trim()&&exec(p)}))}}:null,{html:'<button id="mine-del-last" class="mine-menu-btn">➖ del last</button>',loader:()=>{menu.querySelector("#mine-del-last").addEventListener("click",(async()=>await MineTm.deleteLastExchangeAsync()))}},{html:'<button id="mine-active-time" class="mine-menu-btn disabled" disabled>... active</button>',loader:()=>{}},{html:'<button id="mine-phone" class="mine-menu-btn">Go Live</button>',loader:()=>{}},{html:'<button id="mine-copy-to-server" class="mine-menu-btn">Copy chat to server</button>',loader:()=>{}},{html:`<button id="mine-collapse-resp" class="mine-menu-btn">${uncollapseAiResponsesFn?"Uncollapse":"Collapse"} responses</button>`,loader:()=>{}},{html:'<button id="mine-del-tts-by-prefix" class="mine-menu-btn">rm tts by prefix</button>',loader:()=>{}},{html:'<button id="mine-go-up" class="mine-menu-btn half">↑</button>',loader:()=>{}},{html:'<button id="mine-go-dn" class="mine-menu-btn half">↓</button>',loader:()=>{}}].filter(Boolean),style="\n<style>\n.mine-menu-btn {\n width: 100%;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.mine-menu-btn.half {\n width: 48%;\n}\n.mine-menu-btn[disabled] {\n color: gray;\n}\n</style>\n";newDiv.innerHTML=style+buttonConfigs.map((e=>e.html)).join("\n").trim(),menu.appendChild(newDiv),buttonConfigs.map((e=>e.loader()));const hideConfigMenu=()=>(Mine.simulateClick(Mine.qs('[data-element-id="chat-space-background"]')),!0);menu.querySelector("#mine-del-tts-by-prefix").addEventListener("click",(()=>window.dispatchEvent(new CustomEvent("del-tts-by-prefix")))),menu.querySelector("#mine-collapse-resp").addEventListener("click",(()=>{uncollapseAiResponsesFn?(uncollapseAiResponsesFn(),uncollapseAiResponsesFn=null):uncollapseAiResponsesFn=Mine.isi('[data-element-id="ai-response"] {max-height: 112px;overflow: scroll;}'),hideConfigMenu()})),menu.querySelector("#mine-go-up").addEventListener("click",(()=>navigateMessageInDirection("up"))),menu.querySelector("#mine-go-dn").addEventListener("click",(()=>navigateMessageInDirection("dn"))),menu.querySelector("#mine-phone").addEventListener("click",(()=>{document.dispatchEvent(new Event("mineToggleFullscreen")),MineTm.goLiveAsync()}));const idbe=await MineTm.getChatIndexedDbValueAsync(MineTm.getCurrentChatId()),chatEngagedDurationLabel=MineTm.getChatEngagedDurationLabel(idbe);menu.querySelector("#mine-active-time").innerHTML=`${chatEngagedDurationLabel} active`;const curChatId=MineTm.getCurrentChatId(),copyToServerBtn=menu.querySelector("#mine-copy-to-server");curChatId?copyToServerBtn.addEventListener("click",(async()=>MineTm.copyCurrentChatToServerAsync())):copyToServerBtn.disabled=!0}))};setTimeout(installCustomConfigItemsAsync,500),bindOnSelectorClick('[data-element-id="send-button"]',(()=>{getIsChatScrolledToNearBottom(500)||(MineTm.turnOffJsScrollingInstantly(),setTimeout(MineTm.turnOnJsScrollingInstantly,3e3))}));const installPinnedMsgScrollerAsync=async()=>{bindOnSelectorClick('button:has([d="M878.3 392.1L631.9 145.7c-6.5-6.5-15-9.7-23.5-9.7s-17 3.2-23.5 9.7L423.8 306.9c-12.2-1.4-24.5-2-36.8-2-73.2 0-146.4 24.1-206.5 72.3a33.23 33.23 0 0 0-2.7 49.4l181.7 181.7-215.4 215.2a15.8 15.8 0 0 0-4.6 9.8l-3.4 37.2c-.9 9.4 6.6 17.4 15.9 17.4.5 0 1 0 1.5-.1l37.2-3.4c3.7-.3 7.2-2 9.8-4.6l215.4-215.4 181.7 181.7c6.5 6.5 15 9.7 23.5 9.7 9.7 0 19.3-4.2 25.9-12.4 56.3-70.3 79.7-158.3 70.2-243.4l161.1-161.1c12.9-12.8 12.9-33.8 0-46.8zM666.2 549.3l-24.5 24.5 3.8 34.4a259.92 259.92 0 0 1-30.4 153.9L262 408.8c12.9-7.1 26.3-13.1 40.3-17.9 27.2-9.4 55.7-14.1 84.7-14.1 9.6 0 19.3.5 28.9 1.6l34.4 3.8 24.5-24.5L608.5 224 800 415.5 666.2 549.3z"])',(async e=>{(await Mine.waitFor((()=>{const e=Mine.qsaa('[data-element-id="pop-up-modal"] [data-element-id="response-block"]');return e.length?e:null}))).forEach((e=>e.addEventListener("touchend",(async()=>{const t=e.innerText,n=Mine.qsaa('[data-element-id="response-block"]').filter((t=>t!==e)).find((e=>e.innerText===t));n&&(await Mine.waitFor((()=>!Mine.qs('[data-element-id="pop-up-modal"]'))),await Mine.sleep(1e3),n.scrollIntoView({behavior:"smooth"}))}))))}))};isMobile&&installPinnedMsgScrollerAsync();const highlightQuoteSource=(e,t)=>{if(!e||!t)return null;let n=null;const a=e=>{if(e.nodeType===Node.TEXT_NODE)return(e=>{const a=e.textContent.indexOf(t);if(a>=0){if(e.parentElement&&"MARK"===e.parentElement.tagName&&e.parentElement.textContent===t)return n=e.parentElement,!0;const o=document.createRange();o.setStart(e,a),o.setEnd(e,a+t.length);const s=(()=>{const e=document.createElement("mark");return e.className=MINE_QUOTE_SRC_CLASSNAME,e})();return o.surroundContents(s),n=s,!0}return!1})(e);if(e.nodeType===Node.ELEMENT_NODE){if("MARK"===e.tagName&&e.textContent===t)return n=e,!0;if(e.childNodes)for(let t=0;t<e.childNodes.length;t++)if(a(e.childNodes[t]))return!0}return!1};return a(e),n},MINE_QUOTE_CLASSNAME="mine_quote",MINE_QUOTE_SRC_CLASSNAME="mine_quote_src",MINE_TRIPLE_QUOTE_CLASSNAME="mine_triple_quote_block",MINE_SYSTEM_NOTE_QUOTE_CLASSNAME="mine_system_note_block",installQuotabilityAsync=async()=>{Mine.isi(`\n.${MINE_TRIPLE_QUOTE_CLASSNAME} {\n display: inline-block;\n width: 100%;\n color: gray;\n background-color: rgba(0, 0, 0, 0.2);\n border-radius: 5px;\n padding: 0 3px;\n margin: 0 -3px;\n margin-bottom: 5px;\n}\n\n.${MINE_QUOTE_CLASSNAME} {\n font-style: italic;\n color: gray;\n cursor: pointer;\n}\n\n.${MINE_QUOTE_SRC_CLASSNAME} {\n background: mediumslateblue;\n border-radius: 3px;\n color: black !important;\n cursor: pointer;\n}\n\n.${MINE_SYSTEM_NOTE_QUOTE_CLASSNAME} {\n color: #888888;\n font-style: italic;\n}\n`),bindOnSelectorClick(`.${MINE_QUOTE_CLASSNAME}`,(async e=>highlightForQuoteEle(e,!0))),bindOnSelectorClick(`.${MINE_QUOTE_SRC_CLASSNAME}`,(async e=>window.getSelection().isCollapsed&&Mine.qsaa(".mine_quote").find((t=>t.innerText===`> ${e.innerText}`))?.scrollIntoView({behavior:"smooth"}))),bindOnSelectorClick('[data-element-id="send-button"]',(async()=>{await Mine.sleep(100),enrichAllMessagesIdempotentlyAsync()}))},highlightForQuoteEle=(e,t=!1)=>{const n=e.closest('[data-element-id="user-message"]'),a=Mine.qsaa('[data-element-id="ai-response"], [data-element-id="user-message"]'),o=Array.from(a).filter((e=>e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)),s=e.innerText.substring(1).trim(),i=o.reverse().find((e=>e.innerText.includes(s)));if(!i)return;const r=highlightQuoteSource(i,s);t&&(r??i).scrollIntoView({behavior:"smooth"})},quotify=e=>{const t=e.innerHTML.split("\n").map((e=>{if(e.trim().startsWith("> ")||e.trim().startsWith("> ")){const t=e.replace(/^>\s/,"> ").replace(/>\s/,"> ");return`<span class="${MINE_QUOTE_CLASSNAME}">${t}</span>`}return e}));e.innerHTML=t.join("\n"),[...e.querySelectorAll(`.${MINE_QUOTE_CLASSNAME}`)].forEach((e=>highlightForQuoteEle(e)))},tripleQuotify=e=>{let t=e.innerHTML;t=t.replace(/(?:"""|\`\`\`)\s*\n([\s\S]*?)\n\s*(?:"""|\`\`\`)/g,((e,t)=>`<div class="${MINE_TRIPLE_QUOTE_CLASSNAME}">${t.trim()}</div>`)),e.innerHTML=t},systemMessagify=e=>{let t=e.innerHTML;t=t.replace(/^\[System note\]\s(.*?)$/gm,((e,t)=>`<div class="${MINE_SYSTEM_NOTE_QUOTE_CLASSNAME}">[System note] ${t}</div>`)),e.innerHTML=t},enrichAllMessagesIdempotentlyAsync=async()=>{await Mine.waitForQs('[data-element-id="user-message"]',{recheckIntervalMs:100,timeoutMs:1/0}).catch((()=>null)).then((e=>{if(!e)return;const t=Mine.qsaa('[data-element-id="user-message"] div'),n=e=>{quotify(e),tripleQuotify(e),systemMessagify(e)};Mine.pui(t,n,"enrich"),n(t.pop())}))};installQuotabilityAsync(),setTimeout(enrichAllMessagesIdempotentlyAsync,1e3);const installCitabilityAsync=()=>{Mine.isi('\nblockquote {\n transition: all 0.2s;\n}\n.mine-cite-verified {\n border-color: darkslateblue;\n border-radius: 9px;\n}\n.mine-cite-verified::after {\n content: "quotes you";\n display: inline-block;\n background: darkslateblue;\n color: white;\n padding: 3px 4px;\n border-radius: 0 4px 9px 9px;\n font-size: 10px;\n margin-left: -18px;\n font-family: Arial, sans-serif;\n letter-spacing: 0.3px;\n opacity: 0;\n transform: scaleY(0);\n transform-origin: top;\n animation: fadeInBadge 0.2s ease-out forwards;\n}\n\n@keyframes fadeInBadge {\n from {\n opacity: 0;\n transform: scaleY(0);\n }\n to {\n opacity: 1;\n transform: scaleY(1);\n }\n}\n ');const e=async e=>{Mine.pui(Mine.qsaa("blockquote"),(e=>{const t=e.innerText,n=Mine.qsaa('[data-element-id="user-message"]').find((e=>e.innerText.includes(t)));n&&e.classList.add("mine-cite-verified")}))};document.addEventListener("numMsgsInChatChanged",e),setTimeout(e,3e3)};!isMobile&&installCitabilityAsync();const installCodeHoverAsync=async()=>{const e=()=>Mine.pui(Mine.qsaa("code"),(e=>(e=>{const t=Mine.qsaa("span",e);e.addEventListener("mouseover",(e=>{if("SPAN"!==e.target.tagName)return;const n=e.target.textContent.trim();n&&t.filter((e=>e.textContent.trim()===n)).forEach((e=>(e=>{e.style.border="1px solid hotpink",e.style.margin="-1px",e.style.borderRadius="3px"})(e)))})),e.addEventListener("mouseout",(e=>{"SPAN"===e.target.tagName&&t.forEach((e=>(e=>{e.style.border="",e.style.margin="",e.style.borderRadius=""})(e)))}))})(e)),"code-token-colorizer");e(),document.addEventListener("numMsgsInChatChanged",(()=>e()))};!isMobile&&setTimeout((()=>installCodeHoverAsync()),2e3);const installFavicoAsync=async()=>{const e="https://i.ibb.co/hLZVQdK/image-15-1.png",t=e=>{Array.from(Mine.qsaa("link[rel*='icon']")).forEach((e=>e.remove()));const t=document.createElement("link");t.type="image/x-icon",t.rel="shortcut icon",t.href=e,document.head.appendChild(t),document.body.appendChild(t.cloneNode())};for(let n=0;n<5;n++)setTimeout((()=>t(e)),1e3*n);let n;const a=()=>document.title.startsWith("(*) ");document.addEventListener("visibilitychange",(()=>{document.hidden?(t(e),new Promise((e=>{let t=0;n=setInterval((()=>{(a()||60==++t)&&(clearInterval(n),e(a()))}),1e3)})).then((e=>e?t("https://i.ibb.co/XJnJv5p/image-18.png"):null))):(n&&(clearInterval(n),n=null),t(e))}))};installFavicoAsync();const installToggleHideStuffOnDblActionAsync=async()=>{Mine.isi("#chat-input-textbox:not(:empty) {max-width: 1000px !important;}");const e=(e,t,n={})=>{const{maxTimeBetweenTaps:a=300,maxDistanceBetweenTaps:o=20,mustBeExactElement:s=!1,desiredTapCount:i=null}=n;if(!i)return;let r,c=0,l=0,d=0,m=0;document.body.addEventListener(isMobile?"touchend":"click",(n=>{const u=s?n.target.matches(e):n.target.closest(e);if(!u)return;const p=(new Date).getTime();let y,h;if(isMobile){const e=n.changedTouches[0];y=e.clientX,h=e.clientY}else y=n.clientX,h=n.clientY;const g=p-l,b=Math.hypot(y-d,h-m);g>0&&g<a&&b<o?(c++,clearTimeout(r),r=setTimeout((()=>{c===i&&(n.preventDefault(),t(u,n)),c=0}),a)):c=1,l=p,d=y,m=h}),!1)},t=(t,n,a={})=>{a.desiredTapCount=2,e(t,n,a)},n='div:has(>[data-element-id="more-actions-menu-button"])';let a;Mine.isi(`\n${n} {\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.2s ease;\n}\n `),t('[data-element-id="response-block"], [data-element-id="clear-context-divider"]',(e=>{const t=e.querySelector(n);"1"===window.getComputedStyle(t).getPropertyValue("opacity")?(t.style.opacity="0",t.style.pointerEvents="none"):(t.style.opacity="1",t.style.pointerEvents="auto")}));let o,s=!1;const i=[...MineTm.fsQssToMakeInvisible,...MineTm.fsQssToMakeInvisibleAndUndisplay],r=`\n${i.join(",\n")} {\n opacity: 1;\n transition: opacity 200ms ease-in-out;\n}\n${i.map((e=>`.fs-hide ${e}`)).join(",\n")} {\n opacity: 0;\n pointer-events: none;\n}\n${i.filter((e=>!MineTm.fsQssToMakeInvisible.includes(e))).map((e=>`.fs-undisplay ${e}`)).join(",\n")} {display: none !important;}\n`;Mine.isi(r);let c=!1;const l=async()=>{await MineTm.getTaAsync(),clearTimeout(a),s?(await Mine.sleep(200),o&&(o(),o=null),document.body.classList.remove("fs-undisplay"),document,document.body.classList.remove("fs-hide"),Mine.qs('[data-element-id="config-buttons"]')?.click(),a=setTimeout(l,15e3)):(c||(Mine.isi('\n[data-element-id="chat-input-actions"] {\n max-height: 100px;\n transition: max-height 0.2s;\n}\n'),c=!0),o||(o=Mine.isi(MineTm.fsOtherCss)),await MineTm.getAnimationFrameAsync(),document.body.classList.add("fs-hide"),setTimeout((()=>document.body.classList.add("fs-undisplay")),200)),s=!s};l(),document.addEventListener("mineToggleFullscreen",(()=>l())),t('body, [data-element-id="chat-space-background"], [data-element-id="main-content-area"]',l,{mustBeExactElement:!0}),((t,n,a={})=>{a.desiredTapCount=3,e(t,n,a)})('body, [data-element-id="chat-space-background"], [data-element-id="chat-space-middle-part"], [data-element-id="main-content-area"], [data-element-id="scroll-padding"]',(async()=>await MineTm.goToLastRecentChatAsync()),{mustBeExactElement:!0}),t('[data-element-id="chat-space-middle-part"],div:has(>[data-element-id="chat-space-end-part"])',((e,t)=>{t.target.closest('[data-element-id="user-message"]')||t.target.closest('[data-element-id="ai-response"]')||t.target.closest("button,textarea,input")||l()}))};installToggleHideStuffOnDblActionAsync();const installAttachmentClickActionAsync=async()=>{bindOnSelectorClick(cssForAttachmentIconWrapper,(async(e,t)=>{const n=e.closest('[class*="message-index-"]');if(!n)return Mine.toastWarning("Couldn't find it");const a=[...n.classList].find((e=>e.startsWith("message-index-"))).split("-").pop(),o=(await MineTm.getCurChatIdbMetaAsync())?.idbe;(e=>{const t=new Blob([e],{type:"text/plain"}),n=URL.createObjectURL(t);window.open(n,"_blank"),URL.revokeObjectURL(n)})(o.messages[Number(a)].content.find((e=>"tm_text_file"===e.type)).text)}))};installAttachmentClickActionAsync();const installListAutoPreColonTitleSelectorAsync=async()=>{bindOnSelectorClick('[data-element-id="response-block"]',(async(e,t)=>{const n=window.getSelection();if(!n.isCollapsed)return;const a=t.target.closest("li");if(!a)return;const o=t.target.closest("p, div");if(!o||!a.contains(o))return;const s=a.closest("ul, ol");if(!s)return;if(!Array.from(s.children).every((e=>e.textContent.includes(":"))))return;const i=o.textContent,r=i.indexOf(":");if(-1===r)return;const c=t.clientX-o.getBoundingClientRect().left;if(Math.floor(c/(o.offsetWidth/i.length))<r){const e=document.createRange();e.setStart(o.firstChild,0),e.setEnd(o.firstChild,r),n.removeAllRanges(),n.addRange(e)}}))};isMobile||installListAutoPreColonTitleSelectorAsync();const installLongSendBtnWithPluginsAsync=async()=>{const e=function(e,t=1e3,n){let a,o;return s=>{const i=s.target.closest(e);i&&(s.preventDefault(),s.stopPropagation(),"mousedown"===s.type||"touchstart"===s.type?(o=Date.now(),a=setTimeout((()=>n(i)),t)):"mouseup"!==s.type&&"touchend"!==s.type||clearTimeout(a))}}('[data-element-id="send-button"]',500,(async e=>{await MineTm.setPluginsStateAsync(!0,Mine),await Mine.waitFor((()=>!Mine.qs('[data-element-id="send-button"]')),{recheckIntervalMs:500}),await Mine.sleep(1e3),await MineTm.setPluginsStateAsync(!1,Mine)}));document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("mouseup",e),document.addEventListener("touchend",e)};setTimeout(installLongSendBtnWithPluginsAsync,500);const installHomepageMenuAsync=async()=>{const e=MineTm.getCurrentChatId();if(e&&await MineTm.getChatIndexedDbValueAsync(e))return;const t=await Mine.waitForQs('[data-element-id="pinned-characters-container"]');if(!t)return;const n="mine-menuContainer";if(!Mine.qs(`#${n}`)&&t){const e=document.createElement("div");e.id=n,e.style="text-align: center; color: gray; margin-top: 10px; cursor: default;",e.innerHTML=`<div id="menu-status" style="font-size: 2em;font-family: Palatino;opacity:0;transition:all 0.3s;"><span style="filter:brightness(0%) invert(100%);opacity:0.5;">${MineTm.appNameShort}</span></div>`,t.appendChild(e),setTimeout((()=>Mine.qs("#menu-status").style.opacity=1),10),isMobile&&(async()=>{const t=document.createElement("button");t.innerHTML="Go Live",t.addEventListener("click",(async()=>{t.disabled=!0,await Mine.waitFor((()=>MineTm.goLiveAsync)),MineTm.goLiveAsync()})),e.appendChild(t)})(),(async()=>{const t=await MineTm.getMinePluginBasedSecretAsync("tmChatBufferPassword");if(!t)return;const n=await fetch("https://pepperpotts.fly.dev/tm/isChatBufferAvailable",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:t})});let a;try{a=await n.json()}catch(e){a={isSuccess:!1}}if(!n.ok)return void(a.message&&alert("[fail] "+a.message));if(!a.isSuccess)return alert(`[fail] cant get isChatBufferAvailable: ${a.message}`);if(!a.isChatBufferAvailable)return;const o=document.createElement("br");e.appendChild(o);const s=document.createElement("button");s.innerHTML="Download buffered chat",s.addEventListener("click",(async()=>{s.disabled=!0,s.style.fontStyle="italic";const e=await fetch("https://pepperpotts.fly.dev/tm/download-chat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:t})});let n;try{n=await e.json()}catch(e){n={isSuccess:!1}}if(e.ok){if(!n.isSuccess)return alert(`[fail] ${n.message}`);{const e=JSON.parse(n.chat),t=e.chatID,a=await MineTm.getChatIndexedDbValueAsync(t);if(a){const t=a.messages?.length,n=e.messages?.length;if(t<n&&a.messages?.every(((t,n)=>JSON.stringify(t)===JSON.stringify(e.messages[n]))));else{const o=a.messages?.find(((t,n)=>JSON.stringify(t)===JSON.stringify(e.messages[n])));if(!confirm(`Overwrite existing chat (${t} msgs) with new (${n})?\n\n*(${n>t?"":"not "}recommended)\n* differs starting with "${o?.content?.slice(0,100)}..."`))return}}await MineTm.setChatIndexedDbValueAsync(t,e).catch((e=>alert("error saving buffer"))),await Mine.sleep(100),window.location.hash=`#chat=${t}`,window.location.reload()}}else n.message&&alert("[fail] "+n.message)})),s.style.transition="opacity 0.2s ease-in",s.style.opacity="0",e.appendChild(s),setTimeout((()=>s.style.opacity="1"),10)})()}};installHomepageMenuAsync();const installSidebarChatsMetaEnricherAsync=async()=>{const e=await Mine.waitForQs('[data-element-id="sidebar-middle-part"]');if(!e)return;const t=async e=>{e=e.trim();const t="keyval";return new Promise(((n,o)=>{const s=indexedDB.open("keyval-store");s.onerror=e=>o(`IndexedDB error: ${e.target.error}`),s.onsuccess=s=>{const i=s.target.result.transaction([t],"readonly").objectStore(t).openCursor();i.onerror=e=>o(`Cursor error: ${e.target.error}`),i.onsuccess=t=>{if(!a)return n(null);const o=t.target.result;if(!o)return n(null);{const{key:t,value:a}=o;if(t.startsWith("CHAT_")&&a.favoritedAt&&a?.chatTitle?.trim()===e){const e=a.messages.filter((e=>e.isPinned)).length;return n({numDms:a.messages.length,numPinned:e})}o.continue()}}}}))},n="data-mine-prefix";Mine.isi(`\n[${n}]::before {\n content: attr(${n});\n display: inline-block;\n white-space: pre;\n color: slategray;\n}\n`);let a=!1;Mine.addEventListenerForSubtreeAddOrRemove(e,Mine.debounce((async()=>{a=!0;const e=Mine.qsaa('[data-element-id="custom-chat-item"] .truncate.font-normal,[data-element-id="selected-chat-item"] .truncate.font-normal');if(!e.length)return void(a=!1);let o=!1;for(const a of e){if(o){a?.removeAttribute(n);continue}const e=a.innerText.trim(),s=await t(e);if(!s){o=!0,a?.removeAttribute(n);continue}const{numDms:i,numPinned:r}=s;null==s||a?.setAttribute(n,`${i}d${r?`${r}p`:""} `)}}),10))};setTimeout(installSidebarChatsMetaEnricherAsync,500);const installPluginExecutionDetailsPrettifier=async()=>{bindOnSelectorClick('[data-element-id="additional-actions-of-response-container"]',(async e=>{const t=e.querySelector('[style*="tabular-nums;"]');t&&null==t.getAttribute("data-mine-processed-prettifier")&&(t.innerText=t.innerText.replaceAll("\\n","\n"),t.style.maxHeight="100px",t.style.overflow="scroll",t.style.textOverflow="unset",t.style.background="rgba(0, 0, 0, 0.2)",t.style.borderRadius="10px",t.style.padding="4px",t.setAttribute("data-mine-processed-prettifier","true"))})),bindOnSelectorClick("summary",(async e=>{const t=e.closest("details");if(null!=t.getAttribute("open"))return;const n=t.querySelector("pre");if(await MineTm.getAnimationFrameAsync(),n&&!n.innerText.includes("\n"))try{const e=JSON.parse(n.innerText);n.innerText=JSON.stringify(e,null,2)}catch(e){}}))};setTimeout(installPluginExecutionDetailsPrettifier,1e3),window.location.hash&&!window.location.href.includes("&")&&setTimeout((async()=>{await Mine.waitFor((()=>document.title&&"TM"!==document.title),{recheckIntervalMs:500}).catch((()=>null)),Mine.toast(`ℹ️ ${document.title}`),await MineTm.scrollToLastMsgAsync(!0)}),1e3);const installAutoInitialSubmitterAsync=async()=>{if(!new URLSearchParams(new URL(MineTm.pageLoadHref).search).get("message"))return;const e=await MineTm.getTaAsync();await Mine.waitFor((()=>!!e.value)),await postProcessTaForSubmissionAsync(),await MineTm.getSendButtonAsync(),await clickTaMaybeSubmitButtonWithPluginsEnabledEphemerallyAsync()};installAutoInitialSubmitterAsync();const installCodeCopyOnSpecialClickAsync=async()=>{document.addEventListener("click",(async e=>{if(!e.metaKey||e.shiftKey)return;const t=e.target,n=t.closest("pre:has(code)");if(!n)return;const a=t.closest("div:has(.sticky)").querySelector("button");"Copy code"===a.innerText.trim()&&(a.click(),n.style.transition="all 200ms",n.style.setProperty("background-color","rgb(47,79,79,0.5)","important"),await Mine.sleep(200),n.style.background="")}))};installCodeCopyOnSpecialClickAsync();const installLastChatOpenerAsync=async()=>{"true"===Mine.getQueryParam("mineUseLastChat")&&MineTm.goToLastRecentChatAsync()};installLastChatOpenerAsync();const installSelectionSaver=async()=>{let e=null,t=null;document.addEventListener("selectionchange",(()=>{const a=window.getSelection();if(!a.rangeCount)return;const o=a.getRangeAt(0).startContainer.parentElement.closest('[data-element-id="streaming-block"]');if(o)return e=a.toString(),void(t=o);e&&t&&(document.contains(t)||(setTimeout(n,250),t=null))}));const n=()=>{if(!e?.trim())return;const t=Mine.qsaa('[data-element-id="ai-response"]').pop();if(!t)return;const n=[],a=document.createTreeWalker(t,NodeFilter.SHOW_TEXT);let o;for(;o=a.nextNode();)n.push(o);let s="";const i=n.map((e=>{const t={node:e,start:s.length,end:s.length+e.textContent.length};return s+=e.textContent,t})),r=s.indexOf(e);if(-1===r)return;const c=r+e.length,l=i.find((({start:e,end:t})=>r>=e&&r<=t)),d=i.find((({start:e,end:t})=>c>=e&&c<=t));if(!l||!d)return;const m=document.createRange();m.setStart(l.node,r-l.start),m.setEnd(d.node,c-d.start);const u=window.getSelection();u.removeAllRanges(),u.addRange(m)}};installSelectionSaver();const animateStreamingResponseHeightAsync=async()=>{Mine.isi('\n [data-element-id="response-block"] [data-element-id="ai-response"] {\n transition: height 0.2s cubic-bezier(0.25, 0.8, 0.3, 1) !important;\n overflow: hidden !important;\n }\n ');const e=new Set,t=new MutationObserver((()=>{const t=Mine.qs('[data-element-id="streaming-block"] [data-element-id="ai-response"]');if(!t||e.has(t))return;const n=t.closest('[data-element-id="streaming-block"]');if(!n)return;const a=t.scrollHeight;if(!a)return;t.style.height=`${a}px`;const o=new MutationObserver((()=>(e=>{const t=parseInt(e.style.height)||0,n=e.scrollHeight;t!==n&&requestAnimationFrame((()=>{e.style.height=n-10+"px",e.style.height=`${n}px`}))})(t)));o.observe(t,{childList:!0,characterData:!0,subtree:!0}),e.add(t);const s=new MutationObserver((n=>{for(const a of n)for(const n of a.removedNodes)if(n.matches('[data-element-id="streaming-block"]'))return o.disconnect(),s.disconnect(),void e.delete(t)}));s.observe(n.parentElement,{childList:!0})}));Mine.attachToElementContinuously((async()=>await Mine.waitForQs('[data-element-id="chat-space-middle-part"]',{recheckIntervalMs:1e3,timeoutMs:6e5})),(async e=>{t.observe(e,{childList:!0,subtree:!0})}))};setTimeout(animateStreamingResponseHeightAsync,1e3);const setUpPepperAgentAsync=async()=>{new Mine.PepperAgent("typingmind",[{title:"[onIPhoneActionButton]",description:"Simulate iPhone action button click",run:async()=>MineTm.liveMode.sttWidget?[MineTm.liveMode.SttModes.PHONE_CALL,MineTm.liveMode.SttModes.PUSH_TO_TALK].includes(MineTm.liveMode.sttWidget?.mode)?(await MineTm.liveMode.toggleMuteAsync(),{success:!0,successMsg:"Now "+(MineTm.liveMode.isCallMuted?"muted":"unmuted")}):void 0:(MineTm.goLiveAsync({mode:MineTm.liveMode.SttModes.PUSH_TO_TALK}),{success:!0,successMsg:"Started Push-to-talk live mode."})}])};isMobile&&setUpPepperAgentAsync();const installEnterCurationAsync=async()=>{document.addEventListener("keydown",(e=>{if("chat-input-textbox"!==e.target.id||"Enter"!==e.key||e.shiftKey||e.ctrlKey||e.altKey||e.metaKey)return;if(!e.target.placeholder.includes("Claude"))return;e.preventDefault(),e.stopPropagation();const t=Math.floor(4*Math.random()),n="please ".repeat(t),a=n?` ${n[0].toUpperCase()+n.slice(1)}`.trimEnd():"";MineTm.sendMessageAsync(`[System note]${a} avoid shallow bullet points`,{append:!0})}),!0)};!isMobile&&installEnterCurationAsync()})();