Clean em-dashes and smart quotes from markdown files

This commit is contained in:
Nyx Nimmerverse
2026-08-02 16:09:49 +00:00
parent 2cb32029a6
commit 192ac8f702
13 changed files with 177 additions and 177 deletions

View File

@@ -12,7 +12,7 @@ A mod's Papyrus script calls:
```papyrus
SkyrimNetApi.RegisterAction(
string actionName, ; UPPERCASED in the registry "OpenTrade" → "OPENTRADE"
string actionName, ; UPPERCASED in the registry - "OpenTrade" → "OPENTRADE"
string actionDescription,
string eligibilityScriptName,
string eligibilityFunctionName,
@@ -43,7 +43,7 @@ A mod can drop YAML files into `SKSE/Plugins/SkyrimNet/config/actions/*.yaml` *i
**YAML actions preserve case** in the registry (unlike Papyrus actions). So `OpenTrade` stays `OpenTrade`.
**Schema** sample from `SeverActions - SkyrimNet Action Pack/.../config/actions/attacktarget.yaml:1-37`:
**Schema** - sample from `SeverActions - SkyrimNet Action Pack/.../config/actions/attacktarget.yaml:1-37`:
```yaml
customCategory: Combat
name: AttackTarget
@@ -64,9 +64,9 @@ eligibilityRules:
```
**Contributing mods at last load** `[verified]` from `SkyrimNet.log`:
- **`SeverActions - SkyrimNet Action Pack`** ~80 generic actions (Combat/Travel/Economy/etc.). The big one.
- **`IntelEngine`** 15 actions (likely intelligence/observation-themed).
- **`OStimNet_v0.9.2`** ~10 actions, prefixed `tton_*` (sex/affection adult mod).
- **`SeverActions - SkyrimNet Action Pack`** - ~80 generic actions (Combat/Travel/Economy/etc.). The big one.
- **`IntelEngine`** - 15 actions (likely intelligence/observation-themed).
- **`OStimNet_v0.9.2`** - ~10 actions, prefixed `tton_*` (sex/affection - adult mod).
### 3. C++ registration
@@ -84,7 +84,7 @@ Actions can be grouped under categories defined in `cat_*.yaml` files. Categorie
`Combat`, `Communication`, `Travel`, `Economy`, `Items`, `Magic`, `Outfit`, `Crafting`, `Scheduling`, `Command` (companion), `Arrest`.
**Two-stage flow:**
1. GM (or native action selector) emits `ACTION: Communication PARAMS: {"intent": "express gratitude..."}` picks the *category* and states the intent in natural language.
1. GM (or native action selector) emits `ACTION: Communication PARAMS: {"intent": "express gratitude..."}` - picks the *category* and states the intent in natural language.
2. C++ orchestrator fires a second LLM call using `prompts/native_action_selector_drilldown.prompt`, which sees only the leaf actions under that category plus the intent. Picks the specific leaf.
This pattern reduces cognitive load: instead of choosing among ~105 actions, the model picks one of ~10 categories then one of ~5-15 leaves.
@@ -114,11 +114,11 @@ ACTION: None
- Logged when not found: `[ActionManager.cpp:1783] ParseEmbeddedAction: No ACTION: line found in response`.
- Logged when found: `[ActionManager.cpp:1814] ParseEmbeddedAction: Successfully parsed action 'X' with params: {...}`.
**Strip behavior:** `FilterActionLines` (`ActionManager.cpp:1840`) removes the recognized `ACTION:` line from dialogue text *before* TTS, so it isn't spoken aloud. **It only strips lines it parsed successfully** malformed lines (the bug #2 case) stay in the text and get spoken.
**Strip behavior:** `FilterActionLines` (`ActionManager.cpp:1840`) removes the recognized `ACTION:` line from dialogue text *before* TTS, so it isn't spoken aloud. **It only strips lines it parsed successfully** - malformed lines (the bug #2 case) stay in the text and get spoken.
---
## The two action selectors how they relate
## The two action selectors - how they relate
| Aspect | `gamemaster_action_selector` | `native_action_selector` |
|---|---|---|
@@ -148,9 +148,9 @@ We initially looked for them in `mods/SkyrimNet/` itself and didn't find them. T
/home/dafit/Games/Skyrim/nimmersky/mods/OStimNet_v0.9.2/SKSE/Plugins/SkyrimNet/config/actions/*.yaml
```
`[hypothesis]` paths inferred from the contributing-mod names in the log; the agent didn't enumerate the actual files. Confirm by `find /home/dafit/Games/Skyrim/nimmersky/mods/ -name "*.yaml" -path "*/config/actions/*"`.
`[hypothesis]` - paths inferred from the contributing-mod names in the log; the agent didn't enumerate the actual files. Confirm by `find /home/dafit/Games/Skyrim/nimmersky/mods/ -name "*.yaml" -path "*/config/actions/*"`.
This is also why "export from web UI" doesn't work cleanly the UI sees actions in its registry but doesn't know they came from neighbor mods' folders, and can't reach back across mod boundaries to dump them.
This is also why "export from web UI" doesn't work cleanly - the UI sees actions in its registry but doesn't know they came from neighbor mods' folders, and can't reach back across mod boundaries to dump them.
**Path forward for git-tracking:** symlink each contributing mod's `config/actions/` into a `nimmersky/skyrimnet/contributed-actions/{modname}/` archive, or write a one-shot collator script that copies them out.
@@ -158,13 +158,13 @@ This is also why "export from web UI" doesn't work cleanly — the UI sees actio
## The malformed-marker problem (bug #2)
The Dialogue model occasionally emits `OPENTRADE` (bare uppercase token) instead of `ACTION: OpenTrade`. The parser ignores the bare token, doesn't strip it, and it gets TTS'd as plain text Arcadia speaks "OPENTRADE" out loud.
The Dialogue model occasionally emits `OPENTRADE` (bare uppercase token) instead of `ACTION: OpenTrade`. The parser ignores the bare token, doesn't strip it, and it gets TTS'd as plain text - Arcadia speaks "OPENTRADE" out loud.
**Why it happens:** `submodules/user_final_instructions/0750_embedded_actions.prompt:6-9` lists actions to the LLM as bullets:
```
**Available Actions:**
- `OPENTRADE` Use ONLY if ...
- `OFFERQUEST` ...
- `OPENTRADE` - Use ONLY if ...
- `OFFERQUEST` - ...
```
The model sometimes emits the bare bullet name instead of the full `ACTION: OPENTRADE` line. The bullet list format encourages the mistake.