Skip to content

Commit 131663d

Browse files
author
GetBeholder
committed
Beholder for SillyTavern — v0.5.0
SillyTavern extension that tracks each character's physical state during roleplay — worn clothing (per body slot), held items, wounds, species, and flags — using a small local state-extractor model behind any OpenAI-compatible endpoint, and injects it back into the prompt so the model stops forgetting between turns. AGPL-3.0-only.
0 parents  commit 131663d

49 files changed

Lines changed: 17617 additions & 0 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitattributes

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Auto detect text files and perform LF normalization
2+
* text=auto
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
name: Bug report
2+
description: The extension broke, or the panel showed state the prose doesn't support
3+
labels: ["bug", "needs-triage"]
4+
body:
5+
- type: markdown
6+
attributes:
7+
value: |
8+
Thanks for the report! One note before you start: **roleplay prose is personal.**
9+
Only include chat excerpts you're comfortable posting publicly, and trim them to
10+
the few lines that show the problem.
11+
- type: dropdown
12+
id: kind
13+
attributes:
14+
label: What kind of problem is it?
15+
options:
16+
- The extension malfunctioned (panel/UI broken, errors, settings, connection)
17+
- The model extracted the wrong state from the prose
18+
- Not sure
19+
validations:
20+
required: true
21+
- type: textarea
22+
id: what-happened
23+
attributes:
24+
label: What happened, and what did you expect?
25+
description: For wrong-state reports — what did the panel show, and what should it have shown based on the prose?
26+
validations:
27+
required: true
28+
- type: textarea
29+
id: prose
30+
attributes:
31+
label: Relevant prose excerpt (optional)
32+
description: Trim to the lines that matter. Only share what you're comfortable making public.
33+
- type: input
34+
id: ext-version
35+
attributes:
36+
label: Beholder version
37+
description: Shown in the Extensions panel (or `version` in manifest.json)
38+
validations:
39+
required: true
40+
- type: input
41+
id: st-version
42+
attributes:
43+
label: SillyTavern version
44+
validations:
45+
required: true
46+
- type: dropdown
47+
id: backend
48+
attributes:
49+
label: Extraction backend
50+
description: The server running the Beholder model (not your roleplay model's backend)
51+
options:
52+
- llama.cpp (llama-server)
53+
- KoboldCpp
54+
- LM Studio
55+
- Ollama
56+
- vLLM
57+
- Other / cloud
58+
validations:
59+
required: true
60+
- type: input
61+
id: model
62+
attributes:
63+
label: Extraction model file
64+
description: e.g. `beholder-v45.Q8_0.gguf` — "the Beholder model from the README" is fine if unsure
65+
- type: textarea
66+
id: diagnostic
67+
attributes:
68+
label: Diagnostic report
69+
description: If your version has the "Copy diagnostic report" button, paste its output here. It contains no chat text unless you opted in.
70+
render: text
71+
- type: textarea
72+
id: console
73+
attributes:
74+
label: Console errors (optional)
75+
description: Press F12 → Console tab; paste any red errors that mention Beholder.
76+
render: text

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
blank_issues_enabled: true
2+
contact_links:
3+
- name: Install guide & FAQ
4+
url: https://github.com/GetBeholder/Beholder-ST#readme
5+
about: The README covers installation, backends, the roadmap, and common questions.
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
name: Feature request
2+
description: Suggest something Beholder should track or do
3+
labels: ["enhancement"]
4+
body:
5+
- type: markdown
6+
attributes:
7+
value: |
8+
One rule decides everything Beholder tracks: **the prose has to justify it.**
9+
If the text can't back a value, we don't show it — that's why there are no HP
10+
bars or stat meters today. Check the README roadmap first; if your idea is
11+
listed there, comment on it instead of opening a duplicate.
12+
- type: textarea
13+
id: problem
14+
attributes:
15+
label: What problem would this solve?
16+
description: Describe the situation in your roleplay where Beholder falls short.
17+
validations:
18+
required: true
19+
- type: textarea
20+
id: proposal
21+
attributes:
22+
label: What would you like Beholder to do?
23+
validations:
24+
required: true
25+
- type: textarea
26+
id: grounding
27+
attributes:
28+
label: How would the prose justify it? (optional)
29+
description: An example line of prose that the feature could read the value from helps a lot.
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
name: Setup help
2+
description: Stuck installing the extension, the model, or connecting the backend
3+
labels: ["setup"]
4+
body:
5+
- type: markdown
6+
attributes:
7+
value: |
8+
Check the README install section first — most setups are covered there.
9+
If you're still stuck, fill this in and we'll get you running.
10+
- type: dropdown
11+
id: stage
12+
attributes:
13+
label: Where are you stuck?
14+
options:
15+
- Installing the extension in SillyTavern
16+
- Downloading / choosing the model file
17+
- Starting the backend server (llama.cpp / KoboldCpp / LM Studio / ...)
18+
- Connecting the extension to the backend
19+
- It runs, but nothing shows in the panel
20+
- Something else
21+
validations:
22+
required: true
23+
- type: textarea
24+
id: tried
25+
attributes:
26+
label: What have you tried, and what happened?
27+
description: Exact error messages help more than descriptions of them.
28+
validations:
29+
required: true
30+
- type: input
31+
id: os
32+
attributes:
33+
label: Operating system
34+
description: e.g. Windows 11, macOS 15, Ubuntu 24.04, Android (Termux)
35+
validations:
36+
required: true
37+
- type: dropdown
38+
id: backend
39+
attributes:
40+
label: Backend you're trying to use
41+
options:
42+
- llama.cpp (llama-server)
43+
- KoboldCpp
44+
- LM Studio
45+
- Ollama
46+
- vLLM
47+
- Other / not sure yet
48+
- type: input
49+
id: st-version
50+
attributes:
51+
label: SillyTavern version

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
## What & why
2+
3+
<!-- One or two sentences. Link the issue if there is one: Fixes #NN -->
4+
5+
## Checklist
6+
7+
- [ ] `node --test` passes locally
8+
- [ ] Targets `dev`, not `main` (`main` is what users' SillyTavern installs pull)
9+
- [ ] If validator / schema / prompt / apply-delta behavior changed: cross-repo parity considered
10+
- [ ] User-facing change noted in CHANGELOG.md under Unreleased

.github/workflows/test.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
name: test
2+
3+
on:
4+
push:
5+
branches: [main, dev]
6+
pull_request:
7+
8+
jobs:
9+
test:
10+
runs-on: ubuntu-latest
11+
steps:
12+
- uses: actions/checkout@v4
13+
- uses: actions/setup-node@v4
14+
with:
15+
node-version: 22
16+
- run: node --test

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
node_modules/
2+
.DS_Store
3+
*.log
4+
*.swp
5+
.env

CHANGELOG.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Changelog
2+
3+
All notable user-facing changes to the Beholder extension. Versions follow
4+
`manifest.json` and the format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
5+
6+
Branch model: `main` is the release branch — it's what SillyTavern installs and
7+
updates pull, so it must always be installable. Day-to-day work lands on `dev`
8+
via pull requests; a release is a version bump + `dev``main` merge + tag.
9+
10+
## [Unreleased]
11+
12+
The first tagged release will accompany the public launch. Staged for it (v0.5.0):
13+
14+
### Added
15+
- In-panel **Settings**, **Doctor** (health checks + a copyable diagnostic report),
16+
**Inspector** (the last extraction, end to end), and **Help** views.
17+
- Per-slot **editor + locks** — your edits win over the model, and a locked slot
18+
can't be overwritten — with a desktop popover and a mobile bottom-sheet editor.
19+
- A note box for one-shot free-text state directives before a turn.
20+
- Panel density control: paired-row, columns, or compact list.
21+
22+
### Changed
23+
- **Gold "Tactical Codex" theme** (Cinzel display type, gold accent) in place of
24+
the blue default.
25+
- Redrawn v2 body silhouettes for all families, with always-drawn facial features.
26+
27+
### Removed
28+
- Stamina tracking — dropped from both the UI and the extraction contract.

0 commit comments

Comments
 (0)