Commit Graph

61 Commits

Author SHA1 Message Date
Severian 94d43dbb9d Say what actually went wrong
Every failure produced the same reply: read the directions, and check your
context size. For a card Janitor truncated that was fair. For a request
shape the user never chose, or for a bug in sucker, it blamed them for
something they could not have done anything about — and sent them back to
directions they had already followed.

Failures that can be explained now explain themselves: no card in the
request, no greeting in the chat, a card that arrived truncated (which
keeps the context-size advice, since that is where it belongs), and a
request with nothing in it. Anything else is a bug nobody anticipated, so
the reply says as much, says it is not the user's fault, and asks them to
DM @lyseverian on Discord — an unexplained failure nobody reports never
gets fixed. Internals are never echoed back.

SuckerError is recognised by name as well as by identity, because Next can
bundle a module into more than one chunk and a mismatched class would
quietly send every explained error down the unknown-bug path.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NX2SsmUqQftWTZAY4BDuFa
2026-09-11 05:15:01 +08:00
Severian 7677a26f1a Mention the changelog dot in the changelog
The previous commit's edit to the dialog missed its anchor and applied
nowhere, so the entry never mentioned the dot it was describing.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NX2SsmUqQftWTZAY4BDuFa
2026-09-11 05:07:53 +08:00
Severian b479460804 Harden the parsing, and mark unread changelog entries
Stress-testing the beta with request shapes we had not tried turned up two
more ways to hit the same class of bug. Roles were compared exactly, so a
client sending "Assistant" instead of "assistant" fell straight into the
dingus error. And content was assumed to be a string, so OpenAI's multipart
array form did the same. Roles are now compared case-insensitively and
content is flattened to text first; messages with no usable text are
skipped rather than mistaken for a slot. The slots are plain strings now,
so no caller can reach past them to a raw field again.

Separately: the Changelog button carries a dot when the current release
has not been opened yet, on the desktop button, the mobile menu item, and
the hamburger that hides it. The marker is the version in localStorage, so
every release brings it back on its own and reading it once clears it. The
version is a single constant now rather than being written in two places.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NX2SsmUqQftWTZAY4BDuFa
2026-09-11 05:07:19 +08:00
Severian ec2a1c672c Keep the platform's name out of the tagline
"New: a live CSS editor for your profile." The banner beside it already
names the platform, and so does the changelog entry; the line under the
version does not need to. "Live" earns its place there instead — the
preview is the thing that makes the editor worth opening.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NX2SsmUqQftWTZAY4BDuFa
2026-09-11 04:31:08 +08:00
Severian 7444043bbe Release 2.5
Version heading bumped in both layouts, and the tagline under it now
points at the CSS editor instead of ECHO — the banner beside it is
advertising the editor, so the two now say the same thing.

Changelog entry is written for the people who hit this: they saw the
dingus error every time and had no way to know it was not their fault.
It says what happened in their terms and tells them to try again.

README's version log gets the matching line.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NX2SsmUqQftWTZAY4BDuFa
2026-09-11 04:28:41 +08:00
Severian e7c9adbcc5 Keep multi-turn conversations linked to their card
The first pass read the name from the last user turn and the token from
the last assistant turn. Both are wrong once a conversation continues.

Only sucker's *first* reply carries a conversation token — later ones say
"Character updated" or "unchanged" with no token in them — so reading the
last assistant turn lost the link three turns in and would have created a
duplicate card on every message. tokenCandidates() now searches the whole
conversation, still preferring whatever the user just typed, since pasting
a token is deliberate.

The name is the first user turn after the greeting, not the last one. That
is what the old code read at messages[3], and unlike the last turn it stays
put as messages are appended.

Tests cover a three-turn conversation for both.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NX2SsmUqQftWTZAY4BDuFa
2026-09-11 04:18:26 +08:00
Severian 11c244fdd2 Read the request by role, not by position
Some users' JanitorAI sends a "." user turn between the card and the
greeting; others' does not. Sucker read fixed indices, so on the shorter
shape every slot was off by one: first_mes was set to the name line, and
the name slot did not exist at all. That TypeError was caught by the
handler and reported as the "you dingus, read the directions" message,
which blamed the user for a shape they never chose.

src/lib/messages.ts now resolves the slots by role instead — the card is
the system turn, the greeting is the first assistant turn, the user's
latest input is the last user turn, and sucker's own previous reply is the
last assistant turn. All four hold in both shapes and in a continued
conversation, so the conversation token is found in either as well.

Extraction now throws a description of what is missing rather than a
TypeError, and tests/messages.test.ts pins both shapes. The tests need no
framework: `npm test` runs node's built-in runner.

Existing cards are unaffected: the update path already discards the
extracted name and keeps the original.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NX2SsmUqQftWTZAY4BDuFa
2026-09-11 04:14:04 +08:00
Eslezer e7da1aab4d Merge pull request #10 from severian-dev/feat/css-editor-banner
profile/css editor banner
2026-09-11 00:17:49 +10:00
Eslezer 64013ea5ea Bump version to 2.4 and add CSS editor changelog entry
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-11 00:15:44 +10:00
Eslezer d7c8a9a008 Add CSS editor banner and update Avalon member count
- Bump Avalon member count to 885
- Add looping, muted video banner linking to the new Janitor profile CSS editor
- Desktop: show the Avalon and CSS banners side by side
- Mobile: show them in a carousel (random start, 8s auto-advance, arrows/dots)
- Paint video frames to a canvas so browsers like Opera GX don't overlay
  pop-out controls on the banner

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-10 22:51:12 +10:00
Severian 225c2e3c4f chore: 2.3
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BvRuentLsG1UGpy9gmNWvR
2026-08-04 01:22:09 +08:00
Iseult a66a46fc4a fix: revise dingus error message to surface context size issue; update changelog 2026-03-29 06:00:21 +08:00
Iseult d42d13e7f0 Add ladyofpa.in mirror, update Avalon banner copy, bump member count to 295 2026-02-28 20:13:34 +08:00
Severian b252df5591 Merge pull request #9 from leri-a/master
Adding restart line to docker-compose.
2026-02-04 14:07:01 +08:00
Ema P. 75a16b6ece Adding restart line to docker-compose. 2026-02-03 15:48:24 -05:00
Severian d35d704ce1 chore: 2.2 2026-01-30 18:22:16 +08:00
Severian 549d94fe85 Merge pull request #7 from chill-protocol/webp-link
Option for webp file name or character image URL inputs
2025-12-21 12:41:20 +08:00
tui bdde78475e Added the option to directly input webp file name or character image link when creating PNG for character cards 2025-12-21 09:44:53 +13:00
Ema 06d8b2e36c Merge pull request #6 from severian-dev/docker-next-standalone
Docker next standalone
2025-12-10 22:37:39 -05:00
Ema 59acc534fa Cleaning readme. 2025-12-10 22:34:29 -05:00
Ema fdd13085c3 Removing runtime env 2025-12-10 22:31:54 -05:00
Severian 8923bf3f63 chore: prod env, no sourcemaps 2025-12-11 08:42:20 +08:00
Ema P. a02087915b Standalone Readme Editing 2025-12-10 12:38:10 -05:00
Ema P. e6e230ab84 Building image from .next standalone server. 2025-12-10 10:55:35 -05:00
Ema P. b3aece1e41 Adding next.config.js for standalone. 2025-12-10 10:52:36 -05:00
Ema 24441720d6 Merge pull request #5 from leri-a/master
Updating base image
2025-12-10 09:42:29 -05:00
Ema P. 2fc4e419b2 Updating base image 2025-12-10 09:39:17 -05:00
Severian 95f5a3e725 chore: 2.1 2025-12-10 08:27:22 +08:00
Severian f99985ad6c chore: deps 2025-12-09 10:40:18 +08:00
Severian dceb65a529 google analytics 2025-10-04 05:32:58 +08:00
Severian 35522d935d colored code tags 2025-10-04 05:27:39 +08:00
Severian 875ace5b2d fix non-streaming 2025-10-04 05:22:04 +08:00
Severian 3a67baf48b updated directions 2025-10-04 05:05:44 +08:00
Severian b0d5696a3a match token fix 2025-10-04 04:55:44 +08:00
Severian ff9d5532da chore: test 2025-10-04 04:49:28 +08:00
Severian e10fd80914 minor changes 2025-10-04 04:29:23 +08:00
Severian d720ddcea5 2.0 2025-10-04 04:28:02 +08:00
Severian 624f9f264b formatting 2025-10-03 23:28:34 +08:00
Severian 936a8a7b62 notebook no longer needed 2025-10-03 23:27:28 +08:00
Severian b61879e157 Merge pull request #4 from severian-dev/multiturn-sucker
feat: Added multiturn messaging and tracking of scenario/description …
2025-10-03 23:20:12 +08:00
Ema Park 0a39f1dbea Removing version attribute 2025-09-26 20:01:22 -04:00
Ema Park 5460082ead Initial dockerfile, docker-compose. 2025-09-26 19:50:31 -04:00
chill-protocol a089b7aab3 feat: Added multiturn messaging and tracking of scenario/description changes. 2025-09-15 20:59:51 +12:00
Severian 7c40eef29e chore: 1.9 2025-08-10 21:39:34 +08:00
Severian 5f91675522 chore: add callout 2025-07-13 05:12:10 +08:00
Severian 03d2e5a3e2 chore: 1.8 2025-07-13 05:04:26 +08:00
Severian d7c879cc36 chore: revised extraction implementation 2025-07-13 04:57:25 +08:00
Severian a4b5041657 chore: 1.7 2025-05-24 18:57:44 +08:00
Severian 58d8155984 chore: 1.6 2025-03-03 16:20:51 +08:00
Severian b9da8cfdb4 chore: 1.5 2025-02-16 00:10:27 +08:00