saucepan.ai not working in PM Topic is solved

For support with specific websites

Moderator: trava90

Forum rules
Please always mention the name/domain of the website in question in your topic title.
Please one website per topic thread (to help keep things organized). While behavior on different sites might at first glance seem similar, they are not necessarily caused by the same.

Please try to include any relevant output from the Toolkit Error Console or the Developer Tools Web Console using the following procedure:
  1. Clear any current output
  2. Navigate or refresh the page in question
  3. Copy and paste Errors or seemingly relevant Warnings into a single [ code ] block.
dinosaur
Fanatic
Fanatic
Posts: 236
Joined: 2014-06-03, 09:26
Location: France

saucepan.ai not working in PM

Post by dinosaur » 2026-07-27, 08:01

Yesterday, I discovered saucepan.ai, but sadly it does not work properly with Pale Moon, and (from a blank profile) I get this error in the console:

Code: Select all

Timestamp: 27/07/2026 09:45:50
Error: TypeError: this['#e'].includes is not a function
Source File: https://saucepan.ai/assets/vendor-query-k-8MECoV.js
Line: 1
Here is what it looks like (no bot listed, and chats do not work at all either):
saucepan-ai.png
You do not have the required permissions to view the files attached to this post.

User avatar
adoxa
Astronaut
Astronaut
Posts: 705
Joined: 2019-03-16, 13:26
Location: Qld, Aus.

Re: saucepan.ai not working in PM

Post by adoxa » 2026-07-27, 09:48

The problem is that private members (the #e bit) aren't private enough (it's using the main class's value, not the extended's). Here's a Modify HTTP Response filter to work around it (at least, it shows companions, I didn't go any further than that).

Code: Select all

[["saucepan.ai",["/vendor-query/",["vt=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),G(this.gcTime)&&(this.#e=setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(t){this.gcTime=Math.max(this.gcTime||0,t??(M?1/0:300*1e3))}clearGcTimeout(){this.#e&&(clearTimeout(this.#e),this.#e","vt=class{#ee;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),G(this.gcTime)&&(this.#ee=setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(t){this.gcTime=Math.max(this.gcTime||0,t??(M?1/0:300*1e3))}clearGcTimeout(){this.#ee&&(clearTimeout(this.#ee),this.#ee"]]]]
Since it's quite specific, it may break on a site update.

dinosaur
Fanatic
Fanatic
Posts: 236
Joined: 2014-06-03, 09:26
Location: France

Re: saucepan.ai not working in PM

Post by dinosaur » 2026-07-27, 13:08

Yup, that works, with chats as well. :D

Thanks a bunch !

Yet, from your explanation, it looks like a class inheritance bug in PM's script engine...

User avatar
Moonchild
Project founder
Project founder
Posts: 39714
Joined: 2011-08-28, 17:27
Location: Sweden

Re: saucepan.ai not working in PM

Post by Moonchild » 2026-07-27, 17:41

dinosaur wrote:
2026-07-27, 13:08
Yet, from your explanation, it looks like a class inheritance bug in PM's script engine...
It's a known limitation of the way we have JS classes implemented. Private member syntax is accepted, but those members aren't fully private; if there is a name conflict with an extended class, then it may not work.
JS classes are a mess (classes are pretty foreign to JS's language paradigms -- it's a c-ism shoehorned into it), and our implementation has taken some shortcuts to get something working out there on short notice. It works for most cases.
"Sales hates anything that can't be turned into a confident sentence." - anonymous warehouse worker
"Why debate someone you fundamentally don't trust?" - Dario Amodei
"Seek wisdom, not knowledge. Knowledge is of the past; wisdom is of the future." -- Native American proverb
"Linux makes everything difficult." -- Lyceus Anubite

dinosaur
Fanatic
Fanatic
Posts: 236
Joined: 2014-06-03, 09:26
Location: France

Re: saucepan.ai not working in PM

Post by dinosaur » 2026-07-27, 19:28

Moonchild wrote:
2026-07-27, 17:41
It's a known limitation of the way we have JS classes implemented. Private member syntax is accepted, but those members aren't fully private; if there is a name conflict with an extended class, then it may not work.
JS classes are a mess (classes are pretty foreign to JS's language paradigms -- it's a c-ism shoehorned into it), and our implementation has taken some shortcuts to get something working out there on short notice. It works for most cases.
Hmm... What about "on-the-fly" private class members renaming (should be possible at JS tokenization time, if your engine does use tokenization/semi-compilation), like "member" becomes "__member" when private ?