v1.5.5 - Performance & Stability

This commit is contained in:
Xurkon
2026-03-29 17:19:01 -05:00
parent 751c9974b4
commit 1b5c8ef685
10 changed files with 80 additions and 17 deletions
+49
View File
@@ -0,0 +1,49 @@
---
name: export-session
description: Export session artifacts (markdown files, notes, research) to a documentation folder for review or archival. Use this when you need to save session work, create research documentation, or export artifacts from a development session.
---
# Export Session Skill
Exports session artifacts to a documentation/research folder for later review.
## Instructions
1. **When to use**: After completing a significant coding session, bug fix, or feature implementation
2. **Required parameters**:
- `project`: Project name (e.g., "Questie-X")
- `session`: Descriptive session name (e.g., "Keybind-Fix", "1.5.2-Release")
- `source`: Source directory containing artifacts (typically the brain/artifact directory)
- `target`: Target base directory for exports
## Usage
Run the export script from `.kilocode/skills/export-session/scripts/export_session.py`:
```bash
python .kilocode/skills/export-session/scripts/export_session.py <project> "<session>" --source <source_dir> --target <target_dir> [--extensions .md .lua] [--clean]
```
### Examples
Export markdown files from a session:
```bash
python .kilocode/skills/export-session/scripts/export_session.py Questie-X "Keybind-Fix" --source C:\Brain\session123 --target C:\Research --extensions .md
```
Export all files from current directory:
```bash
python .kilocode/skills/export-session/scripts/export_session.py MyProject "BugFix-123" --source . --target ~/research
```
## Output
Creates a folder at: `<target>/<project>/<session>/` containing:
- All copied artifacts from source
- A summary markdown file with session details
## Notes
- Use `--clean` to overwrite existing sessions
- Use `--extensions` to filter file types (default: all files)
- Use `--no-summary` to skip summary file creation
+2
View File
@@ -20,6 +20,8 @@ Addressed micro-stutters and FPS drops (190 → sub-100) reported during high-fr
- **Compression level**: `LibDeflate:CompressDeflate` level reduced from 9 (slowest/max) to 1 (fastest). For small addon message payloads the size difference is negligible but the CPU cost is substantially lower.
- **Dedup counter**: `IsDuplicateMessage` now uses an O(1) integer counter (`messageCacheCount`) to track cache size instead of an O(n) `for _ in pairs(messageCache)` scan on every incoming message.
- **[Fix — Profiler UI]** Resolved an issue where the `QuestieProfiler` UI text was overlapping horizontally when function names were too long, rendering the time and call counts illegible. Lines are now appropriately spaced and function names are clamped and left-aligned.
## v1.5.4 (2026-03-29)
### Ascension Custom Zone Support
+7 -7
View File
@@ -212,20 +212,20 @@ function QuestieProfiler:CreateUI()
base.scrollContainer.CreateLineFrame = function()
local label = base.scrollContainer:CreateFontString(nil, "ARTWORK", "GameFontNormal")
label:SetText("")
label:SetPoint("TOPLEFT", base.scrollContainer, 0, -lineCounter * 10)
label:SetWidth(base.scrollFrame:GetWidth() - 270)
label:SetJustifyH("RIGHT")
label:SetPoint("TOPLEFT", base.scrollContainer, 10, -lineCounter * 16)
label:SetWidth(base.scrollFrame:GetWidth() - 280)
label:SetJustifyH("LEFT")
label:SetWordWrap(false)
local label2 = base.scrollContainer:CreateFontString(nil, "ARTWORK", "GameFontNormal")
label2:SetText("")
label2:SetPoint("TOPLEFT", base.scrollContainer, base.scrollFrame:GetWidth() - 260, -lineCounter * 10)
label2:SetPoint("TOPLEFT", base.scrollContainer, base.scrollFrame:GetWidth() - 260, -lineCounter * 16)
local label3 = base.scrollContainer:CreateFontString(nil, "ARTWORK", "GameFontNormal")
label3:SetText("")
label3:SetPoint("TOPLEFT", base.scrollContainer, base.scrollFrame:GetWidth() - 150, -lineCounter * 10)
label3:SetPoint("TOPLEFT", base.scrollContainer, base.scrollFrame:GetWidth() - 130, -lineCounter * 16)
base.scrollContainer:SetSize(base.scrollFrame:GetWidth(), lineCounter * 10)
base.scrollContainer:SetSize(base.scrollFrame:GetWidth(), lineCounter * 16)
return { label, label2, label3 }
end
+2 -2
View File
@@ -1,11 +1,11 @@
## Interface: 30300
## Title: |cFF5EBAF3Questie|r|cFFDAFAFD-X|r-Classic|cFF00FF00 v1.5.4|r
## Title: |cFF5EBAF3Questie|r|cFFDAFAFD-X|r-Classic|cFF00FF00 v1.5.5|r
## Notes: A standalone Classic QuestHelper
## Notes-esMX: Ayundante de misiones
## Notes-esES: Ayundante de misiones
## Notes-ptBR: Ajudante de misiones
## Notes-frFR: Assistant de quêtes
## Version: 1.5.3
## Version: 1.5.5
## OptionalDeps: Ace3, CallbackHandler-1.0, HereBeDragons, LibDataBroker-1.1, LibDBIcon-1.0, LibSharedMedia-3.0, LibStub, LibUIDropDownMenu
## SavedVariables: QuestieConfig, QuestieLearnerDB, QuestieCacheDB
## SavedVariablesPerCharacter: QuestieConfigCharacter
+2 -2
View File
@@ -1,11 +1,11 @@
## Interface: 30300
## Title: |cFF5EBAF3Questie|r|cFFDAFAFD-X|r-TBC|cFF00FF00 v1.5.4|r
## Title: |cFF5EBAF3Questie|r|cFFDAFAFD-X|r-TBC|cFF00FF00 v1.5.5|r
## Notes: A standalone Classic QuestHelper
## Notes-esMX: Ayundante de misiones
## Notes-esES: Ayundante de misiones
## Notes-ptBR: Ajudante de misiones
## Notes-frFR: Assistant de quêtes
## Version: 1.5.3
## Version: 1.5.5
## OptionalDeps: Ace3, CallbackHandler-1.0, HereBeDragons, LibDataBroker-1.1, LibDBIcon-1.0, LibSharedMedia-3.0, LibStub, LibUIDropDownMenu
## SavedVariables: QuestieConfig, QuestieLearnerDB, QuestieCacheDB
## SavedVariablesPerCharacter: QuestieConfigCharacter
+2 -2
View File
@@ -1,11 +1,11 @@
## Interface: 11200
## Title: |cFF5EBAF3Questie|r|cFFDAFAFD-X|r-Turtle|cFF00FF00 v1.5.4|r
## Title: |cFF5EBAF3Questie|r|cFFDAFAFD-X|r-Turtle|cFF00FF00 v1.5.5|r
## Notes: A standalone Classic QuestHelper
## Notes-esMX: Ayundante de misiones
## Notes-esES: Ayundante de misiones
## Notes-ptBR: Ajudante de misiones
## Notes-frFR: Assistant de quêtes
## Version: 1.5.3
## Version: 1.5.5
## OptionalDeps: Ace3, CallbackHandler-1.0, HereBeDragons, LibDataBroker-1.1, LibDBIcon-1.0, LibSharedMedia-3.0, LibStub, LibUIDropDownMenu, Questie-X-TurtleDB
## SavedVariables: QuestieConfig, QuestieLearnerDB, QuestieCacheDB
## SavedVariablesPerCharacter: QuestieConfigCharacter
+1 -1
View File
@@ -11,7 +11,7 @@
## Notes-esES: Ayundante de misión
## Notes-ptBR: Ajudante de missão
## Notes-frFR: Assistant de quête
## Version: 1.5.4
## Version: 1.5.5
## OptionalDeps: Ace3, CallbackHandler-1.0, HereBeDragons, LibDataBroker-1.1, LibDBIcon-1.0, LibSharedMedia-3.0, LibStub, LibUIDropDownMenu, Questie-X-WotLKDB, Questie-X-ClassicDB, Questie-X-TBCDB, Questie-X-TurtleDB, Questie-X-AscensionDB, Questie-X-EbonholdDB
## SavedVariables: QuestieConfig, QuestieLearnerDB, QuestieCacheDB, QuestieJourneyDB
## SavedVariablesPerCharacter: QuestieConfigCharacter
+1 -1
View File
@@ -2,7 +2,7 @@
<img src="docs/QuestieXlogo.png" alt="Questie-X Logo" width="320" />
![Version](https://img.shields.io/badge/Questie--X-v1.5.4-blue.svg?style=for-the-badge)
![Version](https://img.shields.io/badge/Questie--X-v1.5.5-blue.svg?style=for-the-badge)
[![Downloads](https://img.shields.io/github/downloads/Xurkon/Questie-X/total?style=for-the-badge&color=e67e22)](https://github.com/Xurkon/Questie-X/releases)
[![Documentation](https://img.shields.io/badge/Documentation-View%20Docs-58a6ff?style=for-the-badge)](https://xurkon.github.io/Questie-X/)
[![Patreon](https://img.shields.io/badge/Patreon-F96854?style=for-the-badge&logo=patreon&logoColor=white)](https://www.patreon.com/Xurkon)
+13 -1
View File
@@ -169,13 +169,25 @@
<h1>Questie-X Documentation</h1>
<p class="subtitle">Complete history of changes, fixes, and additions.</p>
<div style="display: flex; justify-content: center; gap: 10px;">
<code>Version: v1.5.4</code>
<code>Version: v1.5.5</code>
<a href="index.html"
style="background: var(--bg-tertiary); color: var(--accent-blue); text-decoration: none; padding: 2px 6px; border-radius: 4px; font-size: 0.9em; border: 1px solid var(--border-color);">&larr; Back to Documentation</a>
</div>
</div>
<div class="container">
<h2 id="v155">v1.5.5 &mdash; Performance &amp; Stability</h2>
<ul>
<li><strong>[Performance &mdash; Position Caching]</strong> Implemented a 50ms cache for <code>GetPlayerWorldPosition</code> and <code>GetPlayerZonePosition</code> in <code>Compat/HBD.lua</code>. This drastically reduces C API overhead which was the #1 hotspot, with automatic cache invalidation on zone transitions.</li>
<li><strong>[Performance &mdash; Arrow DB Optimization]</strong> Overhauled <code>ZoneDB:GetAreaIdByUiMapId</code> to use an O(1) reverse-mapping cache instead of an O(n) linear scan, eliminating a significant CPU bottleneck triggered hundreds of times per minute by the directional arrow.</li>
<li><strong>[Performance &mdash; Tooltip Throttling]</strong> Throttled the <code>GameTooltip</code> <code>OnUpdate</code> hook to run at 10Hz (100ms) and added a text-change cache, preventing redundant and expensive tooltip recalculations every single frame.</li>
<li><strong>[Performance &mdash; Network Refactor]</strong> Refactored <code>QuestieLearnerComms</code>: reduced compression overhead (negligible size difference but massive CPU savings), slowed processing ticker to match output rate limits, and optimized duplicate detection to O(1).</li>
<li><strong>[Performance &mdash; Arrow Closures]</strong> Hoisted heavy inner closures out of the hot <code>QuestieArrow:UpdateNearestTargets</code> loop to module-level functions, eliminating persistent memory allocation spikes and Garbage Collection (GC) pressure.</li>
<li><strong>[Fix &mdash; Profiler Display]</strong> Fixed textual overlap and vertical spacing issues in the <code>QuestieProfiler</code> UI. Function names are now properly left-aligned, and horizontal spacing ensures metrics remain legible regardless of function name length.</li>
</ul>
<hr>
<h2 id="v153">v1.5.4 &mdash; Dedicated Keybinds Tab</h2>
<ul>
<li><strong>[Feature &mdash; Dedicated Keybinds Tab]</strong> Added a new Keybinds options tab with configurable keybinds for:
+1 -1
View File
@@ -210,7 +210,7 @@
<img src="QuestieXlogo.png" alt="Questie-X Logo" width="400" />
<p class="subtitle">A universal WoW quest-helper with a plugin architecture for any private server.</p>
<div style="display: flex; justify-content: center; gap: 10px;">
<code>Version: v1.5.4</code>
<code>Version: v1.5.5</code>
<a href="changelog.html"
style="background: var(--bg-tertiary); color: var(--accent-green); text-decoration: none; padding: 2px 6px; border-radius: 4px; font-size: 0.9em; border: 1px solid var(--border-color);">View
Changelog</a>