chore: housekeeping — linter & formatter setup

Add .prettierrc.json, .markdownlint.json, .yamllint.yaml, .gitattributes
Run CSharpier, Prettier and markdownlint across the entire codebase.
No logic changes — formatting, using order and line endings only.
This commit is contained in:
2026-05-10 13:01:00 +02:00
parent cd01fa63a1
commit 699d4ede1d
141 changed files with 8833 additions and 5733 deletions
+253 -169
View File
@@ -11,35 +11,50 @@
<img src="docs/images/hellion-forge.png" alt="Hellion Forge" width="180" />
</p>
**Version 1.4.3** — Privacy-First-Chat-Plugin für FINAL FANTASY XIV / Dalamud, basierend auf [Chat 2](https://github.com/Infiziert90/ChatTwo) (EUPL-1.2).
**Version 1.4.3** — Privacy-first chat plugin for FINAL FANTASY XIV / Dalamud, built on
[Chat 2](https://github.com/Infiziert90/ChatTwo) (EUPL-1.2).
Hellion Chat ist ein Privacy-First-Plugin auf dem Chat-2-Fundament. Der größte Teil der Engine kommt aus Chat 2 (Message-Store, Channel-Logik, Hook-System), die meisten Tastenkürzel funktionieren weiterhin wie gewohnt. Was sich ändert: schärfere Privacy-Defaults von Haus aus, eigene Slash-Commands unter `/hellionchat`, kein Webinterface mehr, und mit v1.1.0 eine Theme-Engine als Schritt in Richtung eigenes UI-Look-and-Feel.
Hellion Chat is a privacy-first plugin built on the Chat 2 foundation. The majority of the engine comes from Chat 2
(message store, channel logic, hook system), and most keyboard shortcuts continue to work as you'd expect. What changes:
stricter privacy defaults out of the box, custom slash commands under `/hellionchat`, no web interface, and as of
v1.1.0, a theme engine as a step toward a distinct UI look and feel.
Der Daten-Handling-Fokus liegt auf den DSGVO/EU-, US- und JP-Regelungen, soweit für ein Chat-Plugin praktisch umsetzbar: Speicherzeit pro Kanal, granulare Filter, Selbstauskunft per Export. Eine ausführliche Auflistung steht in [`PRIVACY.md`](PRIVACY.md).
The data-handling focus is on GDPR/EU, US, and JP regulations, as far as practically applicable for a chat plugin:
per-channel retention periods, granular filters, and self-service data export. A full breakdown is available in
[`PRIVACY.md`](PRIVACY.md).
Eigenständiges Repository, EUPL-1.2-lizenziert. Mit v1.0.0 ist der Standalone-Cut abgeschlossen: eigener Namespace `HellionChat.*`, eigene IPC-Kanäle, eigene Source-Tree-Struktur. Distribution über Custom-Repo. Aktiver Upstream-Sync ist mit dem v1.4.x-Cycle beendet: Chat 2 befindet sich in einem grundlegenden Rework und Cherry-Picks sind nicht mehr portierbar. Hellion Chat geht ab da als unabhängige Codebase weiter, Hintergrund und Attribution in [`docs/UPSTREAM_SYNC.md`](docs/UPSTREAM_SYNC.md).
This is a standalone repository, licensed under EUPL-1.2. With v1.0.0 the standalone cut is complete: own namespace
`HellionChat.*`, own IPC channels, own source tree structure. Distribution via custom repo. Active upstream sync ended
with the v1.4.x cycle: Chat 2 is undergoing a fundamental rework and cherry-picks are no longer portable. From here,
Hellion Chat continues as an independent codebase — background and attribution in
[`docs/UPSTREAM_SYNC.md`](docs/UPSTREAM_SYNC.md).
## Acknowledgements
Hellion Chat baut auf [Chat 2](https://github.com/Infiziert90/ChatTwo) von **Infiziert90 (Infi)** und **Anna Clemens** auf, die das Plugin über Jahre gepflegt haben bevor ich den Source-Code überhaupt gesehen habe. Die ganze Kern-Architektur, der Message-Store, die Channel-Logik, das Hook-System und vieles mehr stammt von ihnen. Wenn dir Hellion Chat hilft, läuft die Anerkennung dafür zu großen Teilen an Infi und Anna. Eine ausführliche Danksagung liegt in [NOTICE.md](NOTICE.md).
Hellion Chat is built on [Chat 2](https://github.com/Infiziert90/ChatTwo) by
**[Infiziert90 (Infi)](https://github.com/Infiziert90)** and **[Anna](https://github.com/anna-is-cute)**, who maintained
the plugin for years before I ever saw the source code. The entire core architecture, the message store, the channel
logic, the hook system, and much more all come from them. If Hellion Chat helps you, the credit for that belongs in
large part to Infi and Anna. A full acknowledgement is in [NOTICE.md](NOTICE.md).
Hellion Chat wird unter **Hellion Forge** entwickelt, der spezialisierten Modding- und Plugin-Linie von [Hellion Online Media](https://hellion-media.de).
Hellion Chat is developed under **Hellion Forge**, the specialized modding and plugin branch of
[Hellion Online Media](https://hellion-media.de).
---
## Tech Stack
| Kategorie | Technologie |
| --------------- | ---------------------------------------------------- |
| Plattform | Dalamud Plugin (API Level 15) |
| Sprache | C# 13 / .NET 10 (`net10.0-windows`) |
| Build | Dalamud.NET.Sdk 15.0.0, DalamudPackager 15.0.0 |
| UI | Dear ImGui (Dalamud-Bindings) |
| Datenbank | SQLite (Microsoft.Data.Sqlite, MessagePack-Storage) |
| Lokalisierung | ResX (HellionStrings.resx, .de.resx; PR-basiert) |
| Schriftart | Exo 2 (SIL Open Font License 1.1, gebündelt) |
| Toolchain | dotnet 10 SDK, VS Code mit C# Dev Kit |
| Deployment | GitHub Releases plus Custom-Repo (`repo.json`) |
| Category | Technology |
| ------------ | --------------------------------------------------- |
| Platform | Dalamud Plugin (API Level 15) |
| Language | C# 13 / .NET 10 (`net10.0-windows`) |
| Build | Dalamud.NET.Sdk 15.0.0, DalamudPackager 15.0.0 |
| UI | Dear ImGui (Dalamud bindings) |
| Database | SQLite (Microsoft.Data.Sqlite, MessagePack storage) |
| Localization | ResX (HellionStrings.resx, .de.resx; PR-based) |
| Font | Exo 2 (SIL Open Font License 1.1, bundled) |
| Toolchain | dotnet 10 SDK, VS Code with C# Dev Kit |
| Deployment | GitHub Releases + custom repo (`repo.json`) |
---
@@ -47,151 +62,192 @@ Hellion Chat wird unter **Hellion Forge** entwickelt, der spezialisierten Moddin
### Privacy / Compliance
- **Channel-Whitelist** für die Datenbank-Persistenz mit Privacy-First-Default. Out-of-the-box werden nur eigene Konversationen gespeichert (Tells, Gruppe, FC, Linkshells, Cross-World-Linkshells, Allianz, ExtraChat). Öffentlicher Chat, NPC-Dialoge, System-Spam und Battle-Logs werden auf der Storage-Ebene verworfen.
- **Aufbewahrungsdauer pro Kanal** mit täglicher Background-Bereinigung. Tells 365 Tage, eigene Konversations-Kanäle 90 Tage, globaler Default 30 Tage. Standard ist AUS, das Plugin löscht ohne ausdrückliche Zustimmung nichts.
- **Retroaktive Säuberung** mit Vorschau und Strg+Umschalt-Bestätigung. Wendet die aktuelle Whitelist auf eine bestehende Datenbank an, läuft im Hintergrund, ruft danach VACUUM auf.
- **Export** nach Markdown, JSON oder CSV via Dalamud-Datei-Dialog (DSGVO Art. 15 Auskunftsrecht). Filter nach Kanal, Datums-Bereich oder Sender-Substring.
- **Vollständige Datenschutz-Übersicht** in [`PRIVACY.md`](PRIVACY.md) und Drittanbieter-Komponenten in [`docs/THIRD_PARTY_NOTICES.md`](docs/THIRD_PARTY_NOTICES.md): was gespeichert wird, welche zwei Outbound-Calls existieren (BetterTTV opt-out, Square-Enix-Lodestone-Font), explizite Telemetry-None-Zusage und das Mapping der DSGVO-Rechte (Art. 15/17/18/20/21) auf konkrete Plugin-Funktionen.
- **Channel whitelist** for database persistence with privacy-first defaults. Out of the box, only your own
conversations are stored (tells, party, FC, linkshells, cross-world linkshells, alliance, ExtraChat). Public chat, NPC
dialogue, system spam, and battle logs are discarded at the storage layer.
- **Per-channel retention periods** with a daily background cleanup. Tells: 365 days, own conversation channels: 90
days, global default: 30 days. The default is OFF — the plugin deletes nothing without explicit consent.
- **Retroactive cleanup** with preview and Ctrl+Shift confirmation. Applies the current whitelist to an existing
database, runs in the background, and calls VACUUM afterward.
- **Export** to Markdown, JSON, or CSV via the Dalamud file dialog (GDPR Art. 15 right of access). Filter by channel,
date range, or sender substring.
- **Full privacy overview** in [`PRIVACY.md`](PRIVACY.md) and third-party components in
[`docs/THIRD_PARTY_NOTICES.md`](docs/THIRD_PARTY_NOTICES.md): what is stored, which two outbound calls exist
(BetterTTV opt-out, Square Enix Lodestone font), an explicit no-telemetry statement, and the mapping of GDPR rights
(Art. 15/17/18/20/21) to concrete plugin functions.
### Onboarding
- **First-Run-Wizard** mit drei Profilen (Privacy-First, Locker, Volle Historie) und DSGVO-Hinweis bei der "Volle Historie"-Option.
- **Konfigurations-Migration** seedet Privacy-Defaults bei Bestands-Usern und zeigt eine Benachrichtigung beim ersten Plugin-Start nach Update. Mit v1.0.0 wird zusätzlich für User auf Config-Version 12 oder älter ein einmaliger Tab-Layout-Reset durchgeführt; die alte Tab-Konfiguration wird als `pluginConfigs/HellionChat.json.pre-v13-backup` gesichert.
- **Layout-Migration aus Chat 2** verschiebt Konfiguration und Datenbank in `pluginConfigs/HellionChat/` ohne Datenverlust. Robust gegen blockierte Dateien (Warnung beim User wenn Chat 2 noch geladen ist).
- **Migrate3-Recovery** heilt halb-migrierte Datenbanken aus alten Chat-2-Installationen.
- **First-run wizard** with three profiles (Privacy-First, Relaxed, Full History) and a GDPR notice for the "Full
History" option.
- **Configuration migration** seeds privacy defaults for existing users and shows a notification on the first plugin
start after an update. With v1.0.0, users on config version 12 or older also receive a one-time tab layout reset; the
old tab configuration is backed up as `pluginConfigs/HellionChat.json.pre-v13-backup`.
- **Layout migration from Chat 2** moves configuration and database to `pluginConfigs/HellionChat/` without data loss.
Handles locked files gracefully (warns the user if Chat 2 is still loaded).
- **Migrate3 recovery** heals partially migrated databases from old Chat 2 installations.
### Look & Feel
- **Bilinguale UI** (Englisch und Deutsch) mit Live-Sprachwechsel. Hellion-spezifische Strings in `HellionStrings.<lang>.resx`.
- **Hellion-HUD-Theme** mit Cyan-Teal-Akzenten, Slate-Violet-Tabs, Bernstein-Highlights für aktive Zustände.
- **Chat-Farben-Presets** (v0.6.0) mit sieben Built-in-Bundles in Settings → Aussehen → Chat-Farben: Klassik (Chat 2 Default), High-Contrast, Pastell, Dark-Mode-Tuned, Hellion (Brand), plus Bonus-Stimmungen Night Blue und Indigo Violet. One-Click-Apply, Battle-Channels bleiben unangetastet.
- **Fenster-Deckkraft-Slider** für Kampf-freundliche Transparenz.
- **Mitgelieferte Hellion-Schrift** (Exo 2, OFL-1.1) als optionaler Default statt System-Font.
- **Hellion-Logo** im Plugin-Bundle und in der Dalamud-Plugin-Liste.
- **Bilingual UI** (English and German) with live language switching. Hellion-specific strings are in
`HellionStrings.<lang>.resx`.
- **Hellion HUD theme** with cyan-teal accents, slate-violet tabs, and amber highlights for active states.
- **Chat color presets** (v0.6.0) with seven built-in bundles in Settings → Appearance → Chat Colors: Classic (Chat 2
default), High Contrast, Pastel, Dark Mode Tuned, Hellion (brand), plus bonus moods Night Blue and Indigo Violet.
One-click apply, battle channels remain untouched.
- **Window opacity slider** for combat-friendly transparency.
- **Bundled Hellion font** (Exo 2, OFL-1.1) as an optional default instead of the system font.
- **Hellion logo** bundled in the plugin and displayed in the Dalamud plugin list.
#### Custom Themes (v1.1.0)
HellionChat bringt eine Theme-Engine mit derzeit zehn eingebauten Themes (Hellion Arctic, Hellion Spectrum, Chat 2 Klassik, Event Horizon, Moonlit Bloom, Mint Grove, Night Blue, Indigo Violet, Forge Merchantman, Synthwave Sunset) und ein JSON-basiertes Authoring-Format für eigene Themes. Schema und Schritt-für-Schritt-Anleitung in [`docs/THEME-AUTHORING.md`](docs/THEME-AUTHORING.md). Hellion Spectrum ist Deuteran/Protan-safe (rot-grün-Farbenblindheit) auf Basis der Wong/Okabe-Ito-Palette.
HellionChat ships a theme engine with ten built-in themes (Hellion Arctic, Hellion Spectrum, Chat 2 Classic, Event
Horizon, Moonlit Bloom, Mint Grove, Night Blue, Indigo Violet, Forge Merchantman, Synthwave Sunset) and a JSON-based
authoring format for custom themes. Schema and step-by-step guide in
[`docs/THEME-AUTHORING.md`](docs/THEME-AUTHORING.md). Hellion Spectrum is Deuteranopia/Protanopia-safe (red-green color
blindness) based on the Wong/Okabe-Ito palette.
#### Plugin-Integrationen (v1.3.0)
#### Plugin Integrations (v1.3.0)
- **Honorific Custom-Titles im Chat-Header.** Wenn das Honorific-Plugin aktiv ist und ein Custom-Title gesetzt ist, wird er im Chat-Header über dem Message-Log angezeigt. Auto-Detect mit silent Fallback: ohne Honorific ist der Slot unsichtbar. Toggle in Settings, Integrationen, Honorific. Erste Cycle einer mehrstufigen Plugin-Integrations-Roadmap (Context-Menu, NotificationMaster, RP-Status, ExtraChat und XIVIM folgen).
- **Honorific custom titles in the chat header.** When the Honorific plugin is active and a custom title is set, it is
displayed in the chat header above the message log. Auto-detect with silent fallback: without Honorific the slot is
invisible. Toggle in Settings → Integrations → Honorific. First cycle of a multi-stage plugin integration roadmap
(context menu, NotificationMaster, RP status, ExtraChat, and XIVIM to follow).
### Pop-Out Convenience (v0.6.0)
- **Eingabe-Bar in Pop-Out-Fenstern** als globaler Opt-In in Settings → Fenster → Fenster-Rahmen. Wenn aktiv, hat jedes Pop-Out-Window unten einen kompakten Input mit kanal-farbigem Icon-Button und Text-Eingabe. Kein Wechsel mehr ins Hauptfenster für eine schnelle Antwort.
- **Pro-Pop-Out unabhängiger Text-Buffer und History-Cursor.** Channel-Wechsel im Pop-Out wirkt global wie im Hauptfenster (FFXIV-Channel-API), aber halb-getippte Eingaben kollidieren nicht zwischen Hauptfenster und Pop-Outs.
- **Geteilte Eingabe-Historie** zwischen allen Fenstern via Singleton-Service. Up/Down-Pfeile navigieren überall durch dieselbe Liste der letzten 30 Eingaben.
- **Input bar in pop-out windows** as a global opt-in in Settings → Windows → Window Frame. When active, every pop-out
window has a compact input at the bottom with a channel-colored icon button and text field. No more switching back to
the main window for a quick reply.
- **Per-pop-out independent text buffer and history cursor.** Changing channels in a pop-out works globally like in the
main window (FFXIV channel API), but half-typed input doesn't collide between the main window and pop-outs.
- **Shared input history** across all windows via singleton service. Up/Down arrow keys navigate the same list of the
last 30 entries everywhere.
### Stability
- BetterTTV-Cache-Crash-Fix (Null-Key-Handling).
- Font-Atlas-Build-Fallback bei nicht-installierten System-Fonts.
- Defensive Wrapping aller Migrations-Operationen.
- BetterTTV cache crash fix (null key handling).
- Font atlas build fallback for missing system fonts.
- Defensive wrapping of all migration operations.
### Was gegenüber Chat 2 fehlt
### What's missing compared to Chat 2
Das Webinterface wurde in Hellion Chat 0.2.0 entfernt. Es bedient einen anderen Anwendungsfall als der Fokus dieses Forks, nämlich Remote-Zugriff auf den Chat von einem zweiten Gerät. Genau das kollidiert mit der Privacy-First-These dieses Forks: Ein Chat-Plugin, das einen lokalen HTTP-Server startet, ist für mein Threat-Model eine zu große Angriffsfläche. Also raus damit.
The web interface was removed in Hellion Chat 0.2.0. It serves a different use case than the focus of this fork — remote
access to chat from a second device — which conflicts directly with the privacy-first premise: a chat plugin that starts
a local HTTP server is too large an attack surface for my threat model. So it's gone.
Wer den vollen Funktionsumfang von Chat 2 möchte, ist mit dem Upstream-Plugin besser bedient. Hellion Chat ist bewusst der schmalere Fork.
If you want the full Chat 2 feature set, the upstream plugin serves you better. Hellion Chat is deliberately the slimmer
fork.
---
## Architektur
## Architecture
```
```text
HellionChat/
├── Privacy/
│ └── PrivacyDefaults.cs # Whitelist-Sets, Spec-Retention-Tabelle
│ └── PrivacyDefaults.cs # Whitelist sets, per-channel retention table
├── Export/
│ └── MessageExporter.cs # Markdown / JSON / CSV Serializer
│ └── MessageExporter.cs # Markdown / JSON / CSV serializer
├── Resources/
│ ├── HellionStrings.resx # Hellion-eigene UI-Strings (EN)
│ ├── HellionStrings.de.resx # Deutsche Übersetzung
│ ├── HellionStrings.Designer.cs # Hand-maintained Accessor
│ ├── ChatColourPresets.cs # Sieben Built-in-Color-Presets (v0.6.0)
│ ├── HellionFont.ttf # Exo 2 Variable Font
│ ├── HellionFont-OFL.txt # OFL-1.1 Lizenztext (mit Font gebundelt)
│ └── Language*.resx # Upstream-Lokalisierung (Crowdin)
│ ├── HellionStrings.resx # Hellion-specific UI strings (EN)
│ ├── HellionStrings.de.resx # German translation
│ ├── HellionStrings.Designer.cs # Hand-maintained accessor
│ ├── ChatColourPresets.cs # Seven built-in color presets (v0.6.0)
│ ├── HellionFont.ttf # Exo 2 variable font
│ ├── HellionFont-OFL.txt # OFL-1.1 license text (bundled with font)
│ └── Language*.resx # Upstream localization (Crowdin)
├── Ui/
│ ├── FirstRunWizard.cs # Drei-Profile-Onboarding
│ ├── HellionStyle.cs # ImGui-Theme-Push (lokal und global)
│ ├── FirstRunWizard.cs # Three-profile onboarding
│ ├── HellionStyle.cs # ImGui theme push (local and global)
│ └── SettingsTabs/
│ └── Privacy.cs # Datenschutz-Tab (Filter, Retention, Cleanup, Export)
├── Ipc/ # IPC-Kanäle, in v1.0.0 auf HellionChat.* migriert
├── ChatTwoConflictDetector.cs # Verweigert Plugin-Start wenn Upstream Chat 2 aktiv
│ └── Privacy.cs # Privacy tab (filters, retention, cleanup, export)
├── Ipc/ # IPC channels, migrated to HellionChat.* in v1.0.0
├── ChatTwoConflictDetector.cs # Blocks plugin load if upstream Chat 2 is active
├── images/
│ └── icon.png # Hellion-Logo (256×256)
│ └── icon.png # Hellion logo (256×256)
├── HellionChat.csproj # SDK Dalamud.NET.Sdk/15.0.0
└── HellionChat.yaml # Plugin-Manifest (DalamudPackager-Source)
└── HellionChat.yaml # Plugin manifest (DalamudPackager source)
```
### Regeln
### Rules
- **Code-Namespace ist `HellionChat.*`.** Seit v1.0.0 vollständig konsolidiert auf den Plugin-Namen, kein verbleibender `ChatTwo.*`-Bestand im Source-Tree.
- **AssemblyName ist `HellionChat`.** Eigener Slot in `pluginConfigs/`, eigenes Datei-Manifest, kein Shared State mit Chat 2. Parallel-Load mit Upstream Chat 2 wird beim Start aktiv geblockt (bilinguale Konflikt-Meldung).
- **IPC-Kanäle sind `HellionChat.*`.** Sechs Kanäle für Drittplugin-Anbindung (`Register`, `Available`, `Unregister`, `Invoke`, `GetChatInputState`, `ChatInputStateChanged`). Details in [`docs/IPC.md`](docs/IPC.md).
- **Hellion-eigene Strings in `HellionStrings.*.resx`,** übernommene Strings aus dem Chat-2-Bestand in `Language.*.resx`. Die Original-`Language.*.resx` bleibt strukturell erhalten, weil die existierenden Übersetzungen aus dem Crowdin-Bestand der Upstream-Community weiter wertvoll sind.
- **Kein Direkt-Eingriff in `Plugin.Interface.UiBuilder.FontAtlas`** außerhalb von `FontManager`. Font-Fallback und Hellion-Font laufen zentral.
- **Code namespace is `HellionChat.*`.** Fully consolidated onto the plugin name since v1.0.0 — no remaining `ChatTwo.*`
anywhere in the source tree.
- **AssemblyName is `HellionChat`.** Own slot in `pluginConfigs/`, own file manifest, no shared state with Chat 2.
Parallel-loading upstream Chat 2 is actively blocked on startup (bilingual conflict message).
- **IPC channels are `HellionChat.*`.** Six channels for third-party plugin integration (`Register`, `Available`,
`Unregister`, `Invoke`, `GetChatInputState`, `ChatInputStateChanged`). Details in [`docs/IPC.md`](docs/IPC.md).
- **Hellion-specific strings in `HellionStrings.*.resx`**, strings carried over from Chat 2 in `Language.*.resx`. The
original `Language.*.resx` structure is preserved because the existing translations from the upstream Crowdin
community remain valuable.
- **No direct access to `Plugin.Interface.UiBuilder.FontAtlas`** outside of `FontManager`. Font fallback and the Hellion
font are managed centrally.
---
## Datenbank
## Database
SQLite, Schema von Upstream Chat 2 übernommen (Migration-Stand v3). Hellion-Erweiterungen sind in `Configuration` als Felder, nicht im DB-Schema:
SQLite, schema inherited from upstream Chat 2 (migration level v3). Hellion extensions live in `Configuration` as
fields, not in the DB schema:
| Spalte | Typ | Beschreibung |
| ---------------- | -------- | --------------------------------------------- |
| Id | BLOB | Guid |
| Receiver | INTEGER | Empfänger-ContentId |
| ContentId | INTEGER | Sender-ContentId |
| Date | INTEGER | Unix-Timestamp (ms) |
| ChatType | INTEGER | XivChatType / LogKind |
| SourceKind | INTEGER | Player / NPC / Server / etc. |
| TargetKind | INTEGER | Player / NPC / Server / etc. |
| Sender | BLOB | MessagePack `List<Chunk>` |
| Content | BLOB | MessagePack `List<Chunk>` |
| SenderSource | BLOB | MessagePack `SeString` |
| ContentSource | BLOB | MessagePack `SeString` |
| ExtraChatChannel | BLOB | Guid |
| Deleted | BOOLEAN | Soft-Delete-Marker |
| Column | Type | Description |
| ---------------- | ------- | ---------------------------- |
| Id | BLOB | Guid |
| Receiver | INTEGER | Receiver ContentId |
| ContentId | INTEGER | Sender ContentId |
| Date | INTEGER | Unix timestamp (ms) |
| ChatType | INTEGER | XivChatType / LogKind |
| SourceKind | INTEGER | Player / NPC / Server / etc. |
| TargetKind | INTEGER | Player / NPC / Server / etc. |
| Sender | BLOB | MessagePack `List<Chunk>` |
| Content | BLOB | MessagePack `List<Chunk>` |
| SenderSource | BLOB | MessagePack `SeString` |
| ContentSource | BLOB | MessagePack `SeString` |
| ExtraChatChannel | BLOB | Guid |
| Deleted | BOOLEAN | Soft-delete marker |
Pfad: `pluginConfigs/HellionChat/chat-sqlite.db`. WAL-Modus, Synchronous=NORMAL.
Path: `pluginConfigs/HellionChat/chat-sqlite.db`. WAL mode, Synchronous=NORMAL.
---
## Installation
Hellion Chat wird über ein Dalamud-**Custom-Repository** verteilt.
Hellion Chat is distributed via a Dalamud **custom repository**.
### Frische Installation (kein Chat 2 vorher)
### Fresh install (no prior Chat 2)
1. Dalamud-Settings (`/xlsettings`) → **Experimental** öffnen.
2. Neuen Eintrag unter **Custom Plugin Repositories** anlegen:
```
https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/raw/branch/main/repo.json
```
3. **Save**, dann in `/xlplugins` → **All Plugins** → Refresh.
4. Hellion Chat taucht in der Liste auf, dann installieren wie jedes andere Plugin.
1. Open Dalamud Settings (`/xlsettings`) → **Experimental**.
2. Add a new entry under **Custom Plugin Repositories**:
### Migration aus Chat 2 (mit bestehendem Verlauf)
```text
https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/raw/branch/main/repo.json
```
Chat 2 und Hellion Chat teilen sich die Datenbank-Datei, bis Hellion Chat sie beim ersten Start in den eigenen Pfad verschiebt. Die Reihenfolge ist wichtig:
3. **Save**, then go to `/xlplugins`**All Plugins** → Refresh.
4. Hellion Chat appears in the list — install it like any other plugin.
1. **Chat 2 deaktivieren** in `/xlplugins` (nicht deinstallieren, nur deaktivieren).
2. **FFXIV komplett schließen,** damit SQLite die Datei-Sperre freigibt. Plugin-Reload allein reicht nicht.
3. Spiel neu starten.
4. Custom-Repo wie oben hinzufügen.
5. Hellion Chat installieren. Beim ersten Start wandert die Konfigurations-Datei und das gesamte Datenbank-Verzeichnis in das HellionChat-Layout.
6. **Verifizieren** unter Einstellungen → Datenschutz → Vorschau aktualisieren, dass die Nachrichten-Anzahl plausibel ist.
### Migration from Chat 2 (with existing history)
Chat 2 and Hellion Chat share the database file until Hellion Chat moves it to its own path on first start. Order
matters:
1. **Disable Chat 2** in `/xlplugins` (do not uninstall, just disable).
2. **Fully close FFXIV** so SQLite releases the file lock. A plugin reload alone is not enough.
3. Restart the game.
4. Add the custom repo as described above.
5. Install Hellion Chat. On first start, the configuration file and the entire database directory are moved into the
HellionChat layout.
6. **Verify** under Settings → Privacy → Refresh preview that the message count looks plausible.
### Troubleshooting
**Hellion Chat zeigt 0 Nachrichten, obwohl Chat 2 vorher aktiv war:**
**Hellion Chat shows 0 messages, even though Chat 2 was active before:**
Migration wurde durch eine gesperrte Datei blockiert. Spiel schließen und manuell verschieben:
Migration was blocked by a locked file. Close the game and move the files manually:
Linux / XIVLauncher Core:
```bash
mv ~/.xlcore/pluginConfigs/ChatTwo/chat-sqlite.db \
~/.xlcore/pluginConfigs/HellionChat/chat-sqlite.db
@@ -201,119 +257,147 @@ mv ~/.xlcore/pluginConfigs/ChatTwo/chat-sqlite.db \
```
Windows / XIVLauncher:
```powershell
Move-Item "$env:AppData\XIVLauncher\pluginConfigs\ChatTwo\chat-sqlite.db" `
"$env:AppData\XIVLauncher\pluginConfigs\HellionChat\chat-sqlite.db" -Force
```
Spiel starten, Hellion Chat aktivieren, Verlauf ist zurück.
Start the game, enable Hellion Chat, and your history is back.
### Updates
Updates erscheinen automatisch in der Plugin-Liste, sobald ein neuer `vX.Y.Z`-Tag mit GitHub-Release publiziert ist. Keine Neu-Installation nötig.
Updates appear automatically in the plugin list once a new `vX.Y.Z` tag with a GitHub Release is published. No reinstall
needed.
---
## Distribution
Hellion Chat wird über ein eigenes Dalamud-Custom-Repository verteilt (`repo.json` im Repo-Root). Tag-Pushes auf `vX.Y.Z` lösen den [`release.yml`](.github/workflows/release.yml)-Workflow aus, der den Build-Output (`HellionChat/bin/Release/HellionChat/latest.zip`) plus den passenden Changelog-Block aus `HellionChat.yaml` an das GitHub-Release hängt. Manueller Recovery-Pfad bei verpasstem Auto-Trigger: `gh workflow run release.yml -f tag=vX.Y.Z`.
Hellion Chat is distributed via its own Dalamud custom repository (`repo.json` in the repo root). Pushing a `vX.Y.Z` tag
triggers the [`release.yml`](.github/workflows/release.yml) workflow, which attaches the build output
(`HellionChat/bin/Release/HellionChat/latest.zip`) along with the matching changelog block from `HellionChat.yaml` to
the GitHub Release. Manual recovery path if the auto-trigger is missed: `gh workflow run release.yml -f tag=vX.Y.Z`.
Eine optionale Submission ans Dalamud-Main-Plugin-Repo (zusätzlich zum eigenen Custom-Repo) steht in der [Roadmap](docs/ROADMAP.md).
An optional submission to the Dalamud main plugin repo (in addition to the custom repo) is on the
[roadmap](docs/ROADMAP.md).
---
## Projektstatus
## Project Status
**Version 1.4.3** — Plugin-Load Async-Init plus Repo-Cutover: Plugin auf Dalamud's IAsyncDalamudPlugin-API migriert. Der Konstruktor übernimmt nur noch Bootstrap-Essentials (Config-Load, Language-Init, Conflict-Detection); Migrationen, Service-Allokationen, Window-Konstruktion und Hook-Subscription wandern in LoadAsync, sodass Dalamud die UI während der schweren Arbeit responsive halten kann. Schema-Gate ersetzt die v9 → v16 Migrations-Kette; Configs auf Schema v16+ laden direkt, ältere Configs triggern eine "install v1.4.2 first"-Fehlermeldung. Custom-Repo-URL auf `gitea.hellion-forge.cloud` migriert; das GitHub-Repo bleibt als eingefrorener v1.4.2-Snapshot stehen. Plugin-Load-Zeit liegt bei ~3.7 s Median (5 Reloads), vergleichbar mit v1.4.2: Async-Migration ist Foundation für v1.4.4 Lazy-Init-Optimierungen, kein direkter User-spürbarer Win. Vierter Sub-Patch der v1.4.x Polish-Sweep-Serie (Stand: 2026-05-08).
**Version 1.4.3** — Plugin-load async init plus repo cutover: the plugin has been migrated to Dalamud's
`IAsyncDalamudPlugin` API. The constructor now handles only bootstrap essentials (config load, language init, conflict
detection); migrations, service allocations, window construction, and hook subscriptions move into `LoadAsync`, allowing
Dalamud to keep the UI responsive during heavy lifting. A schema gate replaces the v9 → v16 migration chain; configs at
schema v16+ load directly, older configs trigger an "install v1.4.2 first" error message. Custom repo URL migrated to
`gitea.hellion-forge.cloud`; the GitHub repo remains as a frozen v1.4.2 snapshot. Plugin load time is ~3.7 s median (5
reloads), comparable to v1.4.2 — the async migration is the foundation for v1.4.4 lazy-init optimizations, not a direct
user-facing win. Fourth sub-patch of the v1.4.x polish sweep series (as of 2026-05-08).
Hellion Chat ist ein eigenständiges Plugin, kein Fork mehr im Repository-Sinne. Vollständig abgeschlossen:
Hellion Chat is a standalone plugin, no longer a fork in the repository sense. Fully completed:
- Privacy-Filter (Whitelist, Retention, retroaktive Cleanup, Export)
- First-Run-Wizard mit drei Profilen
- Plugin-Identity: eigener `HellionChat`-Slot, Layout-Migration aus Chat 2, Migrate3-Recovery
- Bilinguale UI (EN und DE) mit Live-Sprachwechsel
- Hellion-Theme, Hellion-Logo, gebündelter Exo-2-Font
- Custom-Repo-Pipeline mit automatisierter GitHub-Release-Distribution
- Slash-Commands auf die `/hellionchat`-Familie konsolidiert
- Webinterface entfernt (v0.2.0)
- Audit-Hardening (Path-Traversal, Retention-Race, DbViewer-Konsistenz)
- About-Tab im Hellion-Branding, EN und DE lokalisiert, mit License und Disclaimer
- AI-Disclosure dokumentiert (siehe [`docs/AI_DISCLOSURE.md`](docs/AI_DISCLOSURE.md))
- Standalone-Cut: Namespace `HellionChat.*`, IPC-Kanäle `HellionChat.*`, Source-Tree-Restructure, Conflict-Detection gegen Upstream Chat 2, SQLite-CVE-Härtung (3.50.3)
- Theme-Engine mit zehn eingebauten Themes plus JSON-Authoring-Format (Engine v1.1.0, Katalog erweitert in v1.2.3, inkl. CVD-safe Hellion Spectrum; Synthwave Sunset in v1.4.1)
- ABGR-Cache auf den Theme-Records: HellionStyle.PushGlobal liest pre-computed ABGR statt RGBA→ABGR pro Slot pro Frame (v1.4.1, ~13 % Render-Time-Recovery)
- Privacy filters (whitelist, retention, retroactive cleanup, export)
- First-run wizard with three profiles
- Plugin identity: own `HellionChat` slot, layout migration from Chat 2, Migrate3 recovery
- Bilingual UI (EN and DE) with live language switching
- Hellion theme, Hellion logo, bundled Exo 2 font
- Custom repo pipeline with automated GitHub Release distribution
- Slash commands consolidated to the `/hellionchat` family
- Web interface removed (v0.2.0)
- Audit hardening (path traversal, retention race, DbViewer consistency)
- About tab in Hellion branding, localized EN and DE, with license and disclaimer
- AI disclosure documented (see [`docs/AI_DISCLOSURE.md`](docs/AI_DISCLOSURE.md))
- Standalone cut: namespace `HellionChat.*`, IPC channels `HellionChat.*`, source tree restructure, conflict detection
against upstream Chat 2, SQLite CVE hardening (3.50.3)
- Theme engine with ten built-in themes plus JSON authoring format (engine v1.1.0, catalog extended in v1.2.3, including
CVD-safe Hellion Spectrum; Synthwave Sunset in v1.4.1)
- ABGR cache on theme records: `HellionStyle.PushGlobal` reads pre-computed ABGR instead of converting RGBA→ABGR per
slot per frame (v1.4.1, ~13% render-time recovery)
In Arbeit: schrittweise Modernisierung des UI-Look-and-Feel über die Theme-Engine hinaus. Was als Nächstes geplant ist und welche Themen langfristig auf der Liste stehen, steht in [`docs/ROADMAP.md`](docs/ROADMAP.md). Konkrete eingeplante Items werden zusätzlich im [Gitea-Issue-Tracker](https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/issues) mit dem `roadmap`-Label geführt.
In progress: incremental modernization of UI look and feel beyond the theme engine. What's planned next and what's on
the long-term list is in [`docs/ROADMAP.md`](docs/ROADMAP.md). Concrete scheduled items are also tracked in the
[Gitea issue tracker](https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/issues) under the `roadmap` label.
### Zur Release-Kadenz
### On Release Cadence
Wer den Repo zum ersten Mal sieht, bemerkt schnell viele Releases und sehr viele Commits in kurzer Zeit. Beides ist eine bewusste Entscheidung. Die volle Begründung mit den vier Faktoren dahinter steht in [`docs/LEARNING-JOURNEY.md`](docs/LEARNING-JOURNEY.md), Sektion "Wie ich so schnell release".
Anyone looking at the repo for the first time will notice a lot of releases and a high commit count in a short time.
Both are deliberate. The full reasoning — four factors behind it — is in
[`docs/LEARNING-JOURNEY.md`](docs/LEARNING-JOURNEY.md), section "How I release this fast".
---
## Community und Support
## Community & Support
- **Hellion Forge Discord** (Modding- und Plugin-Community von Hellion Online Media): https://discord.gg/X9V7Kcv5gR
- Bug-Reports und Feature-Requests: [Gitea Issues](https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/issues)
- **Hellion Forge Discord** (community for HellionChat and other Hellion Online Media plugins and tools):
[discord.gg/X9V7Kcv5gR](https://discord.gg/X9V7Kcv5gR)
- Bug reports and feature requests:
[Gitea Issues](https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/issues)
- Discord DM: `@j.j_kazama`
- Weitere Kontaktwege (Security, Privacy, Quick-Questions): siehe [SUPPORT.md](SUPPORT.md)
- Further contact options (security, privacy, quick questions): see [SUPPORT.md](SUPPORT.md)
---
## Lizenz
## License
EUPL-1.2 (gleiche Lizenz wie Upstream Chat 2). Volltext in [LICENSE](LICENSE), Copyright-Notes mit Dual-Holder-Block in [COPYRIGHT](COPYRIGHT), persönliche Danksagung an die Upstream-Autoren in [NOTICE.md](NOTICE.md).
EUPL-1.2 (same license as upstream Chat 2). Full text in [LICENSE](LICENSE), copyright notes with dual-holder block in
[COPYRIGHT](COPYRIGHT), personal acknowledgement to the upstream authors in [NOTICE.md](NOTICE.md).
© 20232026 die Chat-2-Autoren (Infi, Anna und die Upstream-Contributors) für die Engine, IPC und Storage-Schicht.
© 2026 Hellion Online Media für die Hellion-Chat-Erweiterungen.
© 20232026 the Chat 2 authors ([Infi](https://github.com/Infiziert90), [Anna](https://github.com/anna-is-cute), and
upstream contributors) for the engine, IPC, and storage layer. © 2026 Hellion Online Media for the Hellion Chat
extensions.
### Acknowledgments
- **Infi und Anna (ascclemens)** für die Chat-2-Engine, ohne die dieser Fork nicht existieren würde.
- **Dalamud-Team** für das Plugin-Framework.
- **Chat-2-Crowdin-Community** für die Übersetzungen der Upstream-Strings (siehe Settings → Info → "Chat 2 community translators").
- **[Infi](https://github.com/Infiziert90) and [Anna](https://github.com/anna-is-cute) (ascclemens)** for the Chat 2
engine, without which this fork would not exist.
- **Dalamud team** for the plugin framework.
- **Chat 2 Crowdin community** for the upstream string translations (see Settings → Info → "Chat 2 community
translators").
### FFXIV-Disclaimer
### FFXIV Disclaimer
FINAL FANTASY XIV © SQUARE ENIX CO., LTD. Alle Rechte vorbehalten. Hellion Chat ist ein inoffizielles, von Fans erstelltes Plugin und ist weder mit Square Enix verbunden noch von ihnen unterstützt, gesponsert oder genehmigt.
FINAL FANTASY XIV © SQUARE ENIX CO., LTD. All rights reserved. Hellion Chat is an unofficial, fan-made plugin and is not
affiliated with, supported by, sponsored by, or approved by Square Enix.
### KI-Unterstützung
### AI Assistance
Siehe [`docs/AI_DISCLOSURE.md`](docs/AI_DISCLOSURE.md) für die Pair-Level-Disclosure.
See [`docs/AI_DISCLOSURE.md`](docs/AI_DISCLOSURE.md) for the pair-level disclosure.
---
## Projekt-Dokumente
## Project Documents
Im Repo-Root liegen die Standard-Repository-Dokumente, vertiefende Dokumentation lebt unter [`docs/`](docs/).
Standard repository documents live in the repo root; deeper documentation lives under [`docs/`](docs/).
### Repo-Root
### Repo Root
| Dokument | Inhalt |
| --- | --- |
| [`PRIVACY.md`](PRIVACY.md) | Datenschutz-Übersicht: lokale Speicherung, Outbound-Calls, Telemetry-Status, DSGVO-Rechte und ihre Plugin-Entsprechungen. |
| [`SECURITY.md`](SECURITY.md) | Vulnerability-Reporting via Private Advisory, Scope und Disclosure-Fenster. |
| [`SUPPORT.md`](SUPPORT.md) | Wegweiser für Bugs, Security, Privacy, Quick-Questions. |
| [`CONTRIBUTING.md`](CONTRIBUTING.md) | Was ich akzeptiere bzw. ablehne, Workflow, EUPL-1.2-Bestätigung. |
| [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md) | Verhaltens-Erwartungen und Reporting-Pfad. |
| [`NOTICE.md`](NOTICE.md) | Attribution an Upstream-Maintainer und Komponenten-Credits. |
| [`COPYRIGHT`](COPYRIGHT) | Copyright-Notes mit Dual-Holder-Block. |
| [`LICENSE`](LICENSE) | EUPL-1.2 Volltext. |
| Document | Contents |
| ------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
| [`PRIVACY.md`](PRIVACY.md) | Privacy overview: local storage, outbound calls, telemetry status, GDPR rights and their plugin equivalents. |
| [`SECURITY.md`](SECURITY.md) | Vulnerability reporting via private advisory, scope, and disclosure window. |
| [`SUPPORT.md`](SUPPORT.md) | Guide for bugs, security, privacy, and quick questions. |
| [`CONTRIBUTING.md`](CONTRIBUTING.md) | What I accept and decline, workflow, EUPL-1.2 confirmation. |
| [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md) | Behavioral expectations and reporting path. |
| [`NOTICE.md`](NOTICE.md) | Attribution to upstream maintainers and component credits. |
| [`COPYRIGHT`](COPYRIGHT) | Copyright notes with dual-holder block. |
| [`LICENSE`](LICENSE) | EUPL-1.2 full text. |
### `docs/`
| Dokument | Inhalt |
| --- | --- |
| [`docs/ROADMAP.md`](docs/ROADMAP.md) | Geplante Cycles, mittelfristige und langfristige Themen. |
| [`docs/CHANGELOG.md`](docs/CHANGELOG.md) | Kuratierte Versions-Übersicht mit Verweis auf die GitHub-Release-Pages. |
| [`docs/CONTRIBUTORS.md`](docs/CONTRIBUTORS.md) | Tester, Übersetzer und Code-Beiträger der Hellion-Seite. |
| [`docs/LEARNING-JOURNEY.md`](docs/LEARNING-JOURNEY.md) | Entwicklungsgeschichte, vom Web-Stack zu C# / Dalamud, was ich aus dem Fork gelernt habe. |
| [`docs/IPC.md`](docs/IPC.md) | IPC-Kanal-Reference, Tuple-Payload-Felder, Migrations-Diff für Drittplugins. |
| [`docs/THEME-AUTHORING.md`](docs/THEME-AUTHORING.md) | Theme-Engine-Authoring-Guide (EN): JSON-Schema, Color- und Layout-Slots, Channel-Identity-Regeln, Validierung. |
| [`docs/UPSTREAM_SYNC.md`](docs/UPSTREAM_SYNC.md) | Upstream-Sync-Stand: Cherry-Pick-Pipeline seit v1.4.x geschlossen, Attribution intakt. |
| [`docs/THIRD_PARTY_NOTICES.md`](docs/THIRD_PARTY_NOTICES.md) | NuGet-Dependencies mit Lizenzen, Bundled Assets, Network-Status pro Komponente. |
| [`docs/AI_DISCLOSURE.md`](docs/AI_DISCLOSURE.md) | Offenlegung der KI-Unterstützung im Entwicklungsprozess. |
| Document | Contents |
| ------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------- |
| [`docs/ROADMAP.md`](docs/ROADMAP.md) | Planned cycles, mid-term and long-term topics. |
| [`docs/CHANGELOG.md`](docs/CHANGELOG.md) | Curated version overview with references to GitHub release pages. |
| [`docs/CONTRIBUTORS.md`](docs/CONTRIBUTORS.md) | Testers, translators, and code contributors on the Hellion side. |
| [`docs/LEARNING-JOURNEY.md`](docs/LEARNING-JOURNEY.md) | Development history: from web stack to C# / Dalamud, lessons learned from the fork. |
| [`docs/IPC.md`](docs/IPC.md) | IPC channel reference, tuple payload fields, migration diff for third-party plugins. |
| [`docs/THEME-AUTHORING.md`](docs/THEME-AUTHORING.md) | Theme engine authoring guide (EN): JSON schema, color and layout slots, channel identity rules, validation. |
| [`docs/UPSTREAM_SYNC.md`](docs/UPSTREAM_SYNC.md) | Upstream sync status: cherry-pick pipeline closed since v1.4.x, attribution intact. |
| [`docs/THIRD_PARTY_NOTICES.md`](docs/THIRD_PARTY_NOTICES.md) | NuGet dependencies with licenses, bundled assets, network status per component. |
| [`docs/AI_DISCLOSURE.md`](docs/AI_DISCLOSURE.md) | Disclosure of AI assistance in the development process. |
---
Entwickelt unter **Hellion Forge**, der Modding- und Plugin-Linie von **Hellion Online Media** | Bad Harzburg | [hellion-media.de](https://hellion-media.de)
Developed under **Hellion Forge**, the modding and plugin branch of **Hellion Online Media** | Bad Harzburg |
[hellion-media.de](https://hellion-media.de)