Files
HellionChat/repo.json
T
JonKazama-Hellion 7d87f1c4fe chore(release): v1.5.0 manifest bump
Version strings bumped across all eight tracked surfaces:

- HellionChat/HellionChat.csproj   <Version>1.5.0</Version>
- repo.json                        AssemblyVersion + TestingAssemblyVersion = 1.5.0.0
- repo.json                        three DownloadLink* URLs -> /v1.5.0/latest.zip
- repo.json                        Changelog field synced with yaml
- HellionChat/HellionChat.yaml     new v1.5.0 changelog block on top; v1.4.7
                                   drops out per the four-block slim rule
- docs/CHANGELOG.md                v1.5.0 entry prepended
- docs/ROADMAP.md                  Next Cycle pointer moves to v1.5.1, v1.5.0
                                   joins the released-cycle archive block
- README.md                        three status surfaces (badge, header,
                                   Project Status long-form) on v1.5.0
- .github/forge-posts/v1.5.0.md    Discord announcement body (German)

Preflight blocks A-F all green. Changelog embed total 2050 / 5500 chars
(four subblocks), forge-post frontmatter inside the 60/40 char caps.

Tag, push, merge are reserved for Flo.
2026-05-17 11:43:07 +02:00

35 lines
11 KiB
JSON

[
{
"Author": "Jon Kazama (Hellion Forge)",
"Name": "Hellion Chat",
"InternalName": "HellionChat",
"AssemblyVersion": "1.5.0.0",
"Description": "A Hellion Forge plugin — privacy-focused chat replacement for FINAL FANTASY XIV, built for EU, US and JP data rules.\n\nBy default only your own conversations are stored. Public chat, NPC dialogue, system messages and battle logs are discarded at the storage layer unless you opt in. Retention windows are configurable per channel, history can be wiped retroactively, and everything can be exported on demand.\n\nFeatures:\n- Channel whitelist with a Privacy-First default\n- Per-channel retention with a daily background sweep\n- Retroactive cleanup with preview and Ctrl+Shift confirm\n- Export to Markdown, JSON or CSV\n- First-run wizard with three profiles: Privacy-First, Casual, Full History\n- Bilingual UI (EN/DE) with live language switching\n- Own config and database — no shared state with other plugins\n\nBased on Chat 2 by Infi and Anna (EUPL-1.2).\nSupport: https://discord.gg/X9V7Kcv5gR",
"ApplicableVersion": "any",
"RepoUrl": "https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat",
"Tags": ["Social", "UI", "Chat", "Replacement", "Privacy"],
"DalamudApiLevel": 15,
"LoadRequiredState": 0,
"LoadSync": false,
"CanUnloadAsync": false,
"LoadPriority": 0,
"Punchline": "A Hellion Forge plugin. Privacy-first chat for FFXIV, built to stay out of your way.",
"Changelog": "**v1.5.0 \u2014 DI Foundation and Service Refactor (2026-05-17)**\n\nMajor architecture cycle. The plugin bootstrap moves to a\ngeneric-host DI container (Microsoft.Extensions.Hosting +\nIServiceCollection) modelled on Lightless Sync. Service logging\nmoves from a static Plugin.LogProxy locator to typed\nMicrosoft.Extensions.Logging.ILogger<T> via constructor injection,\nbridged over Dalamud's IPluginLog by a custom DalamudLogger trio.\n\nWhat changes under the hood:\n\n- 18 instance-class services migrate to ILogger<T> via constructor\n injection across four slices: data layer (MessageStore,\n MessageManager, AutoTellTabsService), IPC and integrations\n (HonorificService, IpcManager, TypingIpc, ExtraChat, the three\n GameFunctions classes), UI window layer (ChatLogWindow,\n DbViewer, Popout, three settings tabs), and root (Commands,\n ThemeRegistry, PayloadHandler).\n- Plugin.LogProxy stays in place for the eight buckets ctor\n injection cannot reach: static helpers (EmoteCache,\n AutoTranslate, MemoryUtil, WrapperUtil), Dalamud-reflected\n types (Configuration), the Message data class, and instance\n classes that only log from static methods (FontManager, one\n GameFunctions site).\n- Plugin.cs finishes at 1012 lines \u2014 virtually identical to the\n pre-cycle 1013. The new Phase-1 host build and Plugin.X bridge\n wiring trade out exactly the service and window allocations\n that previously lived in LoadAsync.\n- Cross-plugin baseline confirms no performance penalty against\n Chat 2: HellionChat first-frame HITCH 77 ms median, Chat 2\n 74 ms median. Lightless and XIVInstantMessenger sit around\n 7 ms by deferring their font-atlas build past Finished\n loading \u2014 that pattern is the v1.5.1 follow-up.\n\nUser-visible:\n\n- Slash-command insert fix: pasting a slash command into the\n chat input (Friend List \"/tell\" action, plugin-driven inserts\n from Artisan, AllaganTools etc.) now replaces the existing\n input instead of concatenating. Cherry-picked from ChatTwo\n upstream ee7768ac with namespace adaptation.\n\nMigration v17 stays (no schema bump).\n\nBased on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).\n\n---\n\n**v1.4.10 \u2014 Symbol-Picker and Tell-History Fix (2026-05-16)**\n\nEleventh and final sub-patch of the v1.4.x polish-sweep series.\nSymbol picker for the chat input, a tell-history reload fix for\nusers with many active partners, and a closing cleanup sweep\nbefore v1.5.0 picks up the DI-container adoption.\n\n- Symbol picker: a small smile-icon button left of the channel\n indicator opens a popup with two tabs. The first lists all 161\n FFXIV PUA glyphs (Dalamud's SeIconChar enum); the second\n carries 97 server-verified BMP symbols (latin marks, currency,\n the full Greek alphabet, geometric shapes, suits, notes) \u2014\n every one of them round-tripped through /echo and /say in a\n four-round probe so the in-channel render matches what the\n picker shows. Click drops the glyph at the caret, multi-insert\n keeps the popup open, and a recent-used strip floats the last\n sixteen picks across both tabs. Toggle in Settings \u2192 Chat \u2192\n Message behaviour, default on.\n- Pinned auto-tell tabs reload their full history again: a\n hidden 500-row scan cap in PreloadHistory used to override the\n user-configurable AutoTellTabsHistoryPreload setting, so\n less-frequent pinned partners (rare /tell sessions in an\n otherwise busy week) lost their backlog. The cap is removed;\n the (Receiver, Date) index keeps SQL fast, the client-side\n loop still respects your setting as the upper bound.\n- Slash-command teardown: /hellion, /hellionView,\n /hellionDebugger (and #if DEBUG /hellionSeString) wrappers are\n now cached as private fields. Plugin teardown detaches the\n live registration instead of re-Register'ing with identical\n args \u2014 closes a latent maintenance hazard from v1.4.9.\n- v1.4.x polish-sweep wraps up here. The ImGuiListClipper render\n refactor that was on the v1.4.10 reserve list got dropped\n after cross-platform smoke showed the scroll rubber-band is a\n Wine / Linux render-pipeline quirk, not universal \u2014 Windows\n users never saw it. It will get its own platform-targeted\n spike in a later patch. Next major cycle is v1.5.0 with the\n DI-container adoption (Microsoft.Extensions.Hosting +\n ILogger<T>) modelled on Lightless.\n- Migration v17 stays (no schema bump).\n\nBased on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).\n\n---\n\n**v1.4.9 \u2014 Plugin-Load Render Polish (2026-05-15)**\n\nTenth sub-patch of the v1.4.x polish-sweep series. First-frame\nrender cost drops from ~127 ms median to ~76 ms median,\ncomfortably under Dalamud's 100 ms HITCH warning threshold.\n\n- First-frame defer: six non-essential rendering sections inside\n ChatLogWindow skip their first Draw and run one frame later\n (bottom status bar, channel-name SeString chunks, window bounds\n check, v0.6.1 hint banner, autocomplete, input-preview\n calculation). User-visible delay is ~17 ms at 60 fps, hidden\n inside the post-reload font-atlas build window.\n- Slash-command centralisation: /hellion, /hellionView,\n /hellionSeString and /hellionDebugger are registered in\n LoadAsync instead of inside the corresponding window\n constructors. The plugin-manager Open and configuration buttons\n hang on the same path.\n- Plugin-load profiling logs stay on at Information level\n (MessageStore connect/migrate, FilterAllTabs, auto-translate\n warmup) as a regression tripwire \u2014 a future load past 100 ms\n will show up in /xllog without a Debug filter.\n- ChatTwo IPC compatibility layer: HellionChat now mirrors\n ChatTwo's full IPC surface (GetChatInputState,\n ChatInputStateChanged, Register, Unregister, Available,\n Invoke) under the ChatTwo.* namespace in addition to our\n existing HellionChat.* provider gates. Third-party\n integrations that historically only subscribe to ChatTwo's\n IPC \u2014 for example Artisan's and AllaganTools' context-menu\n hooks \u2014 keep working without requiring a code change on their\n side. Conflict detection prevents ChatTwo from loading in\n parallel with HellionChat, so there is no slot-collision risk\n at runtime.\n- Migration v17 stays (no schema bump).\n\nBased on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).\n\n---\n\n**v1.4.8 \u2014 Hook-Layer and Polish Quick-Wins (2026-05-14)**\n\nNinth sub-patch of the v1.4.x polish-sweep series. Hook-layer\ncluster (DbViewer FTS5 full-text search, ad-block foundation\ninvestigation) plus three polish quick-wins.\n\n- DbViewer full-text search: optional FTS5 index across the full\n chat history. Built asynchronously on first load after the\n update with a progress toast. The local page-filter remains\n available as the default mode. Queries match as exact phrases\n -- multi-word terms must appear together in order; advanced\n users can opt into raw FTS5 MATCH syntax by wrapping their own\n double-quotes.\n- Custom theme files now auto-reload when edited while the theme\n is active -- no need to re-click the theme in the picker.\n- Retention sweep no longer blocks the framework thread, removing\n the ~194ms mini-hitch per sweep.\n- Status bar renders correctly at Windows display scaling > 100%.\n- Receive-suppressed-tells routing investigated this cycle and\n postponed to v1.5.x: when other plugins suppress tells via\n CheckMessageHandled, the FFXIV chat pipeline skips the\n RaptureLogModule.AddMsgSourceEntry path so HellionChat's\n ContentIdResolverHook does not fire and tell-partner\n identification breaks. The fix belongs next to the planned\n ad-block hook layer where the same patch surface comes up.\n- Internal: messages.Id is declared BLOB but stored as TEXT\n (Microsoft.Data.Sqlite Guid binding). FTS bulk insert and\n LoadByGuids match the TEXT storage form on both sides.\n Migration v17 stays (no schema bump).\n\nBased on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo, EUPL-1.2).\n\n---\n\nFull history: https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases",
"AcceptsFeedback": true,
"DownloadLinkInstall": "https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases/download/v1.5.0/latest.zip",
"DownloadLinkUpdate": "https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases/download/v1.5.0/latest.zip",
"DownloadLinkTesting": "https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases/download/v1.5.0/latest.zip",
"TestingAssemblyVersion": "1.5.0.0",
"IconUrl": "https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/raw/branch/main/HellionChat/images/icon.png",
"ImageUrls": [
"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"
],
"DownloadCount": 0,
"IsHide": false,
"IsTestingExclusive": false,
"CategoryTags": ["social"]
}
]