Skip to content

Releases: xenofei/SillyTavern-ScenePulse

v6.13.8 — Profiles, Crash Log, GPU Fix + Slash/Macro Audit

Choose a tag to compare

@xenofei xenofei released this 25 Apr 06:04

12 releases worth of work since v6.11.9. The big changes:

🎭 Prompt + Schema Profiles (closes #15)

Each profile is a self-contained {schema, systemPrompt, panels, fieldToggles, dashCards, customPanels} bundle. Switch profiles via dropdown to swap setups (e.g. Medieval Fantasy ↔ Pokemon ↔ Modern Slice-of-Life) without manually editing prompts and schemas.

  • Settings → Prompts → new "Profile" section with active dropdown + new/duplicate/rename/export/import/delete buttons
  • Full Profile Manager overlay with inline actions, "Custom Panels" tag tooltip, Clear Panels per-row action
  • Per-chat override — pin a different profile for one specific chat
  • Read-through, not destructive — switching is s.activeProfileId = newId, no copy, no risk of mid-edit data loss
  • Migration is automatic — your existing s.schema + s.systemPrompt + s.customPanels are wrapped into a "Default" profile on first load. Nothing lost.
  • Import safety: validates schema as JSON object, auto-suffixes name collisions
  • /sp-profile [name] slash command for chat-input switching

🐞 Combined Crash Log + Debug Inspector (closes #13)

  • Captures errors from both ScenePulse AND host SillyTavern (window.error, window.unhandledrejection, ScenePulse-internal err() calls — tagged by source)
  • Persistent across reloads (in-memory + localStorage + server file flush)
  • Settings → Advanced → Debug → 🔍 Debug Inspector opens a tabbed overlay:
    • Activity — live debug log with filter/search/copy/export
    • Last Response — pretty-printed raw LLM JSON
    • Crashes — severity + source filters, expand-for-stack, "Report on GitHub" per row pre-fills a new-issue template

Replaces the previous SP Log + View Log + Last Response + Crash Log buttons.

⚡ 80% GPU at idle, fixed (fixes #14)

A reporter on RTX3060 saw extreme GPU usage just from loading the extension. Two specialist agents traced it to the "Water Droplet Matrix" decorative canvas in the Time dashboard card.

  • WDM canvas gated behind a new "Reduce visual effects" toggle (Settings → General) AND prefers-reduced-motion
  • Throttled 60→20fps with IntersectionObserver pause when off-screen
  • Removed mix-blend-mode from dashboard layers (was forcing per-frame compositor work)
  • Weather overlay properly torn down on disable instead of left attached
  • 13 will-change: transform declarations removed from weather particles

Expected: 80% → ~25% on defaults, 80% → near-zero with new toggle on.

🧪 Slash Command + Macro audits (closes #7, #8)

Both subsystems were marked "experimental needs further testing" since v6.3.6. Audited, fixed, locked behind regression tests.

Slash commands:

  • New: /sp-profile, /sp-refresh slash commands
  • Fixed: /sp-toggle now handles custom panels case-insensitively
  • Fixed: /sp-export includes profiles in payload
  • Fixed: /sp-debug honors maxSnapshots instead of hardcoded 30
  • 50 regression tests cover the dispatcher + every synchronous handler

Macros:

  • Fixed: sp_characters returned '' when charactersPresent was empty [] (truthy-array gotcha)
  • Added: sp_relationships, sp_main_quests, sp_side_quests, sp_quest_count, sp_char_count, sp_active_profile
  • Every handler wrapped in try/catch — runtime errors now log to Crash Log instead of breaking ST's prompt build
  • 50 regression tests cover all handlers, both registration APIs, and error containment

📚 Character Wiki + Persistence Overhaul (fixes #11)

Three confirmed root causes for "characters disappearing from wiki":

  1. Wiki only iterated latest.characters — now walks the cumulative roster across all snapshots
  2. Pipeline non-delta path silently dropped off-scene characters every periodic refresh — now preserves
  3. renderExisting recovered only ONE prior snapshot when ScenePulse activated mid-chat — now walks every AI message chronologically and replays through delta-merge

38 regression tests cover the four scenarios end-to-end.

🪟 Polish

  • Panel Manager no longer collapses to one line (fixes #12)
  • Stuck scene transition overlay fix (fixes #10)
  • Meter bar widths now stable across deltas at every resolution (mobile / 1366×768 / desktop / QHD / 4K) — was a CSS grid min-width: auto gotcha
  • Meter status labels capped at 4 words with hover tooltip showing the full text
  • Portrait upload from Character Wiki avatars (v6.12.3)
  • Crash Log + Debug Inspector overlays no longer dismiss the settings panel underneath
  • Single-dialog enforcement so rapid-clicking Delete doesn't stack confirms

🧪 Test coverage

559 regression test cases across 15 suites. Every release runs the full suite. Notable additions in this stretch:

Suite Cases Covers
issue-7-slash-commands 50 Dispatcher routing, every synchronous handler, custom panel toggle
issue-8-macros 50 All 18 macros, both registration APIs, error containment
issue-11-wiki-persistence 38 Pipeline preservation, cumulative roster, mid-chat backfill
issue-13-crash-log 37 Capture, dedup, ring eviction, persistence round-trip, logger bridge
issue-15-profiles 52 Migration, CRUD, per-chat override, import safety, export shape

Full changelog

See CHANGELOG.md for entries v6.11.9 through v6.13.8.

v6.11.9 — Panel Architecture Redesign + Bug Fixes

Choose a tag to compare

@xenofei xenofei released this 11 Apr 07:39

Full Panel Architecture Redesign

Complete rewrite of the panel layout system based on 15-agent expert analysis (architecture strategist, best-practices researcher, performance oracle, design reviewer, Dooms-Enhancement-Suite analysis).

Architecture

  • Flexbox column layout — panel uses display:flex; flex-direction:column; overflow:hidden
  • Per-section scrolling — each section scrolls independently within max-height:70vh
  • Content stops at last element — no wasted space below short sections
  • Zero bleed — sections occupy non-overlapping flex regions by construction
  • Zero JS height calculations — flexbox handles all sizing

Toolbar

  • Features dropdown (4 toggles → 1 button with checkboxes)
  • Button groups with pill backgrounds
  • State-driven brand icon (idle/generating/error)
  • Contextual subtitle with live scene info

Typography

  • 12px minimum font floor with CSS variable scale system
  • --sp-fs-base through --sp-fs-xl — override base to scale everything
  • ~200 font-size declarations migrated to variables

New Features

  • Section header icons (SVG per section type)
  • Collapse/expand all button for Characters + Relationships
  • Elapsed field in Scene Details
  • Sparklines visible at all resolutions
  • Story ideas positional slot ordering (guaranteed 5 unique types)

Bug Fixes

  • Fix stuck scene transition overlay (#10) — replaced unreliable setTimeout with animationend event for cleanup. Card now removed from DOM entirely after animation.

Polish

  • 40+ hardcoded colors → theme variables
  • 10-item UX polish from design review
  • Mobile/tablet mode fixes
  • ~35 lines stale code removed

32 files changed, 900+ insertions, 710+ deletions

v6.9.14 — Per-Chat Custom Panels + Full Panel Overhaul

Choose a tag to compare

@xenofei xenofei released this 10 Apr 08:37

Highlights

Per-chat custom panel definitions — each chat owns its own panels. Create Fantasy RPG stats in one chat and Sci-Fi systems in another — switching chats shows only that chat's panels. New chats start empty; add panels via 13 genre templates, import, or manual creation.

Per-field toggles — disable individual fields within a panel without deleting them. The field is skipped from the LLM prompt and hidden from the UI.

Custom panel visual overhaul — meter fields show threshold-colored bars (green→amber→red with danger glow), enum fields render as severity-colored badge pills, list fields as chip tags, number fields in monospace wells. Custom sections get a teal left border.

What's New Since v6.8.6

Custom Panels (v6.9.11–v6.9.14)

  • Per-chat panel definitions — each chat owns independent panel configs
  • Enable/disable toggle per panel AND per individual field
  • 13 genre templates: Fantasy RPG, Sci-Fi, Horror, Social, Superhero, Western, Cyberpunk, Medieval, Post-Apocalyptic, School, Pirate, Wuxia, Romance
  • Export/import panel definitions as JSON
  • Duplicate panel button, key collision detection
  • Visual overhaul: threshold meters, enum pills, list chips, number wells
  • Stable panel IDs for reliable per-chat storage

Core Features (v6.8.41–v6.9.10)

  • Delta mode production-default (saves 66-77% output tokens)
  • Scene Details overhaul (summary, tension meter, witnesses, changed dots)
  • Organization tracking in relationship web
  • Universal hover-enlarged portrait preview
  • NAME AWARENESS character promotion, anti-contamination framing
  • Quest validation (actionability, consolidation, urgency calibration)
  • Model compatibility guide (Claude Opus 4.6, GPT-5.4, Gemini 3.1 Pro, GLM-5.1)
  • WCAG AA contrast compliance, theme variable migration
  • i18n extracted to 29 JSON locale files (JS codebase -35%)
  • 10 test files with 200+ assertions

Model Compatibility (April 2026)

  • Recommended: Claude Opus 4.6, GPT-5.4, Gemini 3.1 Pro / 3 Flash, Grok 4, GLM-5.1
  • Compatible: DeepSeek V3.2, Mistral Large 3, Qwen 3 32B+, Llama 4 Maverick/Scout
  • Not recommended: Models under 14B, heavily quantized (Q3/Q2)

Full changelog in CHANGELOG.md

v6.8.6 — Inline tracker prompt-following + two-tier recovery

Choose a tag to compare

@xenofei xenofei released this 07 Apr 18:43

Highlights

Two targeted improvements to the inline (Together) generation path that reduce tracker omissions and make the cases that still happen significantly cheaper to recover from.

Added

  • Head-anchor injection for the inline tracker prompt — a short reminder is prepended to the start of the chat context in addition to the existing tail reminder. Counters lost-in-the-middle attention behavior on long prompts: as the injected schema spec plus accumulated snapshot state grows past ~3k tokens, the appendix instruction at the end can lose attention weight and the model may forget to emit the tracker block entirely. The head anchor primes the model's planning phase to know structured output is required before it begins narrative generation.

  • Two-tier recovery for tracker omission — when extraction fails because no tracker markers are present in the response, ScenePulse now attempts a cheap continuation re-prompt before escalating to a full separate generation. The continuation passes only the response text and asks for a tracker JSON object for it.

    • Cost: ~600–2500 prompt tokens vs ~6000 for the existing full fallback
    • Latency: ~10–15s vs ~40s
    • The tracker is generated from the exact text already on screen rather than being re-derived from chat context, so it stays in sync
    • Falls through to the existing full separate generation if the continuation fails — worst-case behavior is unchanged
    • Triggered only for the "no SP markers" failure mode when response length is between 500 and 2500 chars
    • The "markers found, JSON unparseable" failure mode skips this tier and goes straight to the full fallback, since re-prompting will not change the underlying sampling/formatting glitch

Notes

Both changes target the inline (Together) generation path only. Neither touches cleanJson or the vendored jsonrepair library. The full separate-generation fallback is unchanged and remains the final tier of recovery.


Full changelog: v6.8.5...v6.8.6

v6.8.5 — Character Wiki, Relationship Web, jsonrepair, responsive overhaul

Choose a tag to compare

@xenofei xenofei released this 07 Apr 04:54

Highlights

Two major new features (Character Wiki + Relationship Web), a from-the-ground-up responsive overhaul (container queries, tablet fullscreen, auto-condense), and a real tokenizer-based JSON repair pipeline that finally handles unescaped quotes inside string values.

Added

  • Character Wiki overlay — full-screen browser for every character ever encountered, not just those currently in scene. Walks all snapshots once on open to aggregate first seen / last seen / appearance count / last known location. Per-character cards with appearance grid, relationship meters with mini sparklines, goals, inventory, fertility, and history metadata. Search, filter pills (All / In Scene / Absent), sort (name / first seen / last seen / appearances / relevance), compact grid view, per-character user notes, avatars, JSON / MD export.
  • Relationship Web visualization — SVG circular layout graph of all characters with relationship edges. Edge weight reflects relationship strength; node color matches per-character color assignment. Reachable from the Character Wiki header.
  • Container queries for the panel#sp-panel declares container-type: inline-size so child styles can react to the panel's actual width. Replaces viewport @media queries that broke on position: fixed. New breakpoints at 550px and 380px.
  • Tablet fullscreen mode — 601–1024px viewports now match the mobile fullscreen overlay pattern, with the mobile slide-up animation and the mobile-style top bar.
  • Auto-condense at intermediate widths so the panel stops bleeding into the chat area before mobile mode kicks in.
  • Vendored jsonrepair v3.12.0 (ISC) for inline tracker JSON parsing — 106-case validation suite under tests/vendor/.

Changed

  • Quest journal UI — NEW / UPDATED / RESOLVED badges right-aligned alongside action buttons. "upd" abbreviation replaced with the full localized label, capitalized via CSS so all 29 locales render naturally.
  • Inline tracker JSON repaircleanJson() now uses jsonrepair (tokenizer-based) instead of nine in-house regex passes. Worst-case behavior is unchanged: a clean throw still triggers the existing separate-generation fallback.
  • Character storage now accumulates the full historical character set forever; the view layer trims via filterForView(). This is what powers the Character Wiki overlay.
  • Interceptor prompt — removed "silently / hidden" wording that some models parroted into narrative. Concrete delta payload examples improve schema compliance.

Fixed

  • Character / relationship syncfilterForView() reconciles d.characters against d.charactersPresent and stubs missing entries from d.relationships. Resolves the "4 relationships shown but only 1 character" gap.
  • MemoryBooks compatibilityGENERATION_ENDED handler now guards on inlineGenStartMs > 0 so extraction only runs against generations ScenePulse actually injected into. Other extensions firing GENERATION_ENDED for their own quietPrompt() calls will no longer corrupt their messages.
  • Streaming hider regex broadened to match [SCENE TRACKER ...] echoed instruction headers some models emit during streaming.
  • JSON parse error logging now matches both V8/Chromium position N and Firefox line N column N formats. Previously the logged context window was always anchored at position 0 on Firefox.
  • Fallback warning text distinguishes markers found, JSON unparseable (sampling/formatting failure) from no SP markers (prompt-following failure). Conflating these previously sent investigations down the wrong path.
  • Live language switch for settings, schema-edit protection (lock confirm), experimental-feature caution labels, miscellaneous settings i18n fixes.
  • Wiki meter row spacing — label column widened so "Compatibility" no longer overflows into the bar.

Full changelog: v6.6.0...v6.8.5

v6.6.0 — Scene Intelligence Overhaul

Choose a tag to compare

@xenofei xenofei released this 06 Apr 19:35

What's New in v6.6.0

Highlights

  • Auto-update system — Amber pulsing dot + "Update & Reload" button when a new version is available
  • Relationship sparklines — Mini inline graphs on each meter, full-screen SVG graph overlay with hover tooltips
  • Historical node navigation — Click timeline dots to scroll to that message in chat, auto-loading lazy-loaded messages
  • Token usage analytics — Full-screen panel with per-snapshot breakdown
  • Theme presets — Default, Midnight, Fantasy, Cyberpunk, Minimal
  • Slash commands & macros/sp status, /sp regen, {{sp_location}}, etc. (experimental)
  • Settings tabs — General, Generation, Prompts, Advanced
  • Unlimited snapshot storage — Configurable in Advanced settings

Relationship Meters

  • Unique per-meter delta icons (heart, star, Adinkra, lightning/shield, venn rings)
  • Green/red/yellow color-coded +/- indicators
  • Previous-value white marker on bars
  • Mini sparklines always visible

Generation

  • Shared extraction pipeline eliminates code duplication
  • Smart snapshot selection for context embedding
  • Post-extraction schema validation
  • Function tool calling (Separate mode, experimental)
  • Streaming hider with aggressive early JSON detection

Quality of Life

  • Message highlight with glow pulse + graceful fade
  • Browse All: paginated (10/page) with tension badges
  • Keyboard shortcuts: Alt+Shift+P (panel), Alt+Shift+R (regen), Escape (close)
  • Config export/import as shareable JSON
  • Accessibility: focus-visible, prefers-reduced-motion
  • max_tokens no longer overridden by ScenePulse

See full changelog for complete details.