198 lines
10 KiB
YAML
Executable File
198 lines
10 KiB
YAML
Executable File
name: Hellion Chat
|
||
author: Jon Kazama (Hellion Forge)
|
||
punchline: A Hellion Forge plugin — privacy-focused chat replacement for FFXIV, built for EU, US and JP data rules.
|
||
description: |-
|
||
Chat replacement for FINAL FANTASY XIV with privacy controls built around
|
||
EU, US and JP data-protection rules.
|
||
|
||
By default only your own conversations are stored. Public chat, NPC
|
||
dialogue and system messages stay out of the database unless you opt in.
|
||
Retention windows are configurable per channel, history can be wiped
|
||
retroactively, and everything can be exported on demand.
|
||
|
||
Features:
|
||
- Channel whitelist with a Privacy-First default
|
||
- Per-channel retention with a daily background sweep
|
||
- Retroactive cleanup (Ctrl+Shift confirm)
|
||
- Export to Markdown, JSON or CSV
|
||
- First-run wizard with three preset profiles
|
||
- Bilingual UI (EN/DE) with live language switching
|
||
- Own config and database — no shared state with other plugins
|
||
|
||
Based on Chat 2 by Infi and Anna (EUPL-1.2).
|
||
Support: https://discord.gg/X9V7Kcv5gR
|
||
repo_url: https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat
|
||
accepts_feedback: true
|
||
icon_url: https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/raw/branch/main/HellionChat/images/icon.png
|
||
image_urls:
|
||
- https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/raw/branch/main/HellionChat/images/chatWindow.png
|
||
- https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/raw/branch/main/HellionChat/images/settingsOverview.png
|
||
- https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/raw/branch/main/HellionChat/images/themesPicker.png
|
||
tags:
|
||
- Social
|
||
- UI
|
||
- Chat
|
||
- Replacement
|
||
- Privacy
|
||
changelog: |-
|
||
**v1.4.10 — Symbol-Picker and Tell-History Fix (2026-05-16)**
|
||
|
||
Eleventh and final sub-patch of the v1.4.x polish-sweep series.
|
||
Symbol picker for the chat input, a tell-history reload fix for
|
||
users with many active partners, and a closing cleanup sweep
|
||
before v1.5.0 picks up the DI-container adoption.
|
||
|
||
- Symbol picker: a small smile-icon button left of the channel
|
||
indicator opens a popup with two tabs. The first lists all 161
|
||
FFXIV PUA glyphs (Dalamud's SeIconChar enum); the second
|
||
carries 97 server-verified BMP symbols (latin marks, currency,
|
||
the full Greek alphabet, geometric shapes, suits, notes) —
|
||
every one of them round-tripped through /echo and /say in a
|
||
four-round probe so the in-channel render matches what the
|
||
picker shows. Click drops the glyph at the caret, multi-insert
|
||
keeps the popup open, and a recent-used strip floats the last
|
||
sixteen picks across both tabs. Toggle in Settings → Chat →
|
||
Message behaviour, default on.
|
||
- Pinned auto-tell tabs reload their full history again: a
|
||
hidden 500-row scan cap in PreloadHistory used to override the
|
||
user-configurable AutoTellTabsHistoryPreload setting, so
|
||
less-frequent pinned partners (rare /tell sessions in an
|
||
otherwise busy week) lost their backlog. The cap is removed;
|
||
the (Receiver, Date) index keeps SQL fast, the client-side
|
||
loop still respects your setting as the upper bound.
|
||
- Slash-command teardown: /hellion, /hellionView,
|
||
/hellionDebugger (and #if DEBUG /hellionSeString) wrappers are
|
||
now cached as private fields. Plugin teardown detaches the
|
||
live registration instead of re-Register'ing with identical
|
||
args — closes a latent maintenance hazard from v1.4.9.
|
||
- v1.4.x polish-sweep wraps up here. The ImGuiListClipper render
|
||
refactor that was on the v1.4.10 reserve list got dropped
|
||
after cross-platform smoke showed the scroll rubber-band is a
|
||
Wine / Linux render-pipeline quirk, not universal — Windows
|
||
users never saw it. It will get its own platform-targeted
|
||
spike in a later patch. Next major cycle is v1.5.0 with the
|
||
DI-container adoption (Microsoft.Extensions.Hosting +
|
||
ILogger<T>) modelled on Lightless.
|
||
- Migration v17 stays (no schema bump).
|
||
|
||
Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).
|
||
|
||
---
|
||
|
||
**v1.4.9 — Plugin-Load Render Polish (2026-05-15)**
|
||
|
||
Tenth sub-patch of the v1.4.x polish-sweep series. First-frame
|
||
render cost drops from ~127 ms median to ~76 ms median,
|
||
comfortably under Dalamud's 100 ms HITCH warning threshold.
|
||
|
||
- First-frame defer: six non-essential rendering sections inside
|
||
ChatLogWindow skip their first Draw and run one frame later
|
||
(bottom status bar, channel-name SeString chunks, window bounds
|
||
check, v0.6.1 hint banner, autocomplete, input-preview
|
||
calculation). User-visible delay is ~17 ms at 60 fps, hidden
|
||
inside the post-reload font-atlas build window.
|
||
- Slash-command centralisation: /hellion, /hellionView,
|
||
/hellionSeString and /hellionDebugger are registered in
|
||
LoadAsync instead of inside the corresponding window
|
||
constructors. The plugin-manager Open and configuration buttons
|
||
hang on the same path.
|
||
- Plugin-load profiling logs stay on at Information level
|
||
(MessageStore connect/migrate, FilterAllTabs, auto-translate
|
||
warmup) as a regression tripwire — a future load past 100 ms
|
||
will show up in /xllog without a Debug filter.
|
||
- ChatTwo IPC compatibility layer: HellionChat now mirrors
|
||
ChatTwo's full IPC surface (GetChatInputState,
|
||
ChatInputStateChanged, Register, Unregister, Available,
|
||
Invoke) under the ChatTwo.* namespace in addition to our
|
||
existing HellionChat.* provider gates. Third-party
|
||
integrations that historically only subscribe to ChatTwo's
|
||
IPC — for example Artisan's and AllaganTools' context-menu
|
||
hooks — keep working without requiring a code change on their
|
||
side. Conflict detection prevents ChatTwo from loading in
|
||
parallel with HellionChat, so there is no slot-collision risk
|
||
at runtime.
|
||
- Migration v17 stays (no schema bump).
|
||
|
||
Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).
|
||
|
||
---
|
||
|
||
**v1.4.8 — Hook-Layer and Polish Quick-Wins (2026-05-14)**
|
||
|
||
Ninth sub-patch of the v1.4.x polish-sweep series. Hook-layer
|
||
cluster (DbViewer FTS5 full-text search, ad-block foundation
|
||
investigation) plus three polish quick-wins.
|
||
|
||
- DbViewer full-text search: optional FTS5 index across the full
|
||
chat history. Built asynchronously on first load after the
|
||
update with a progress toast. The local page-filter remains
|
||
available as the default mode. Queries match as exact phrases
|
||
-- multi-word terms must appear together in order; advanced
|
||
users can opt into raw FTS5 MATCH syntax by wrapping their own
|
||
double-quotes.
|
||
- Custom theme files now auto-reload when edited while the theme
|
||
is active -- no need to re-click the theme in the picker.
|
||
- Retention sweep no longer blocks the framework thread, removing
|
||
the ~194ms mini-hitch per sweep.
|
||
- Status bar renders correctly at Windows display scaling > 100%.
|
||
- Receive-suppressed-tells routing investigated this cycle and
|
||
postponed to v1.5.x: when other plugins suppress tells via
|
||
CheckMessageHandled, the FFXIV chat pipeline skips the
|
||
RaptureLogModule.AddMsgSourceEntry path so HellionChat's
|
||
ContentIdResolverHook does not fire and tell-partner
|
||
identification breaks. The fix belongs next to the planned
|
||
ad-block hook layer where the same patch surface comes up.
|
||
- Internal: messages.Id is declared BLOB but stored as TEXT
|
||
(Microsoft.Data.Sqlite Guid binding). FTS bulk insert and
|
||
LoadByGuids match the TEXT storage form on both sides.
|
||
Migration v17 stays (no schema bump).
|
||
|
||
Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).
|
||
|
||
---
|
||
|
||
**v1.4.7 — Backlog Cleanup and Mid-Features (2026-05-13)**
|
||
|
||
Eighth sub-patch of the v1.4.x polish-sweep series. First
|
||
user-visible feature bundle since v1.4.5 — pinned tell tabs that
|
||
survive relog, opt-in Honorific glow rendering, and a configurable
|
||
sidebar.
|
||
|
||
- TempTell Pin: right-click a TempTell tab in the sidebar to pin
|
||
it. Pinned tabs survive relog, keep their conversation history
|
||
(loaded on demand from the message store), and stay bound to
|
||
the same /tell partner. Hard cap of 5 pinned tabs in a pool
|
||
separate from the 15-tab auto-tell pool — total ceiling is 20
|
||
tabs. New 'Pinned' section in the sidebar with its own divider
|
||
header
|
||
- Honorific Glow outline now renders when the title carries a
|
||
Glow colour. Opt-in via Settings → Integrations → 'Render glow
|
||
outlines (Honorific)' (default off, dodges the per-frame
|
||
DrawList overhead on low-end hardware). Gradient (Color3 /
|
||
GradientColourSet / Wave / Pulse) is parsed but rendered
|
||
statically — a later cycle will port the full animation
|
||
- Sidebar width is now configurable in Theme & Layout (range
|
||
44–160 px). Default stays icon-only; widen to fit section
|
||
headers like 'Active Tells (3)' without truncation
|
||
- Settings Save no longer pops the chat input back to /tell with
|
||
a pinned partner — Configuration.UpdateFrom now preserves the
|
||
runtime CurrentChannel across the persistent-tab merge, and
|
||
TabSwitched deep-clones the seeded channel instead of sharing
|
||
the previous tab's UsedChannel
|
||
- Util/ImGuiUtil.cs DrawArrows IconButton id now uses
|
||
(id + 1).ToString() instead of the operator-precedence quirk
|
||
id + 1.ToString() — generated IDs stay numerically stable
|
||
- Internal: IPluginLogProxy indirection over Dalamud's IPluginLog
|
||
routes all ~91 Plugin.Log call sites through a testable proxy.
|
||
MessageStore.Migrate0 can now run in xUnit without loading
|
||
Dalamud.dll, closing the gap F12.1 left in v1.4.6
|
||
- Internal: TempTab counter switched from an Interlocked cached
|
||
field to a derived Tabs.Count(predicate) — pin-state transitions
|
||
are cold-path and don't need lock-free reads
|
||
|
||
Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).
|
||
|
||
---
|
||
|
||
Full history: https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases
|