Toolasha

Toolasha - Enhanced tools for Milky Way Idle.

Acestea sunt versiunile scriptului în care codul a fost actualizat. Arată toate versiunile.

  • v0.5.31 27-01-2026

    Add debug logging for dungeon tracker backfill investigation

    Issue: Backfill creating "Unknown" dungeons despite visible "Battle started:" messages

    Debug Logging Added:

    • extractChatEvents(): Log battle_start/battle_end extraction, event counts
    • getDungeonNameWithFallback(): Log which priority level used for each key count
    • saveRunsFromEvents(): Log final summary of runs saved per dungeon

    This will reveal:

    • Whether "Battle started:" messages are being extracted from DOM
    • Why dungeon name detection is failing for Pirate Cove runs
    • Which fallback priority is being used (or if all fail)

    Changes:

    • Modified: src/features/combat/dungeon-tracker-chat-annotations.js
  • v0.5.31 27-01-2026

    v0.5.31 - Add multi-action profit display and dungeon run numbers

    Features:

    • Multi-action profit calculator for tooltips (craft/coinify/decompose/transmute)
      • New alchemy-profit-calculator.js module
      • Shows best profit highlighted with other options summarized
      • Toggleable setting (default: off)
    • Dungeon tracker: Add run numbers to party chat annotations
      • Format: [Run #5: 4m 32s] matches UI numbering
      • Only shows on successful runs (not failed/canceled)

    Changes:

    • Added: src/features/market/alchemy-profit-calculator.js
    • Modified: src/features/market/tooltip-prices.js
    • Modified: src/features/settings/settings-config.js
    • Modified: src/features/combat/dungeon-tracker-chat-annotations.js

    Tests: 187/187 passing

  • v0.5.30 27-01-2026

    Redesign house cost display and add Missing Mats Marketplace button (v0.5.30)

    House Cost Display Improvements:

    • Removed top "Construction Costs" section (eliminated duplication)
    • Updated "Cumulative to Level" dropdown to start at next level (was next+1)
    • Redesigned material display to single-line compact format:
      • Format: [inv/req] Material @ price = total Missing: X
      • Green "Missing: 0" when sufficient, red when short
      • Matches action panel aesthetic

    Missing Mats Marketplace Integration:

    • Added "Missing Mats Marketplace" button after Total Market Value
    • Only shows when materials with missing > 0 exist
    • Button navigates to marketplace and creates custom tabs
    • Tabs only created for missing materials (skips sufficient)
    • Each tab shows material name + red "Missing: X" badge
    • Clicking tab opens that item in marketplace
    • Auto-cleanup when marketplace closes

    🤖 Generated with Claude Code

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

  • v0.5.29 27-01-2026

    Add diagnostic logging to dungeon tracker for live tracking investigation (v0.5.29)

    Added console.log statements to onNewBattle() to track execution flow:

    • When function fires (with wave, battleId, isTracking state)
    • When wave data is missing
    • When wave 0 detected (new dungeon start)
    • When mid-dungeon restore attempted/succeeded/failed
    • When subsequent wave detected

    This will help identify why only the first dungeon run is tracked live while subsequent runs only appear via backfill.

    🤖 Generated with Claude Code

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

  • v0.5.28 27-01-2026

    Fix dungeon icons setting reset after script updates

    Problem: taskIconsDungeons setting reset to default (false) after every Tampermonkey update Root cause: Settings UI initialized before character data loaded, using global defaults

    Solution: Delay settingsUI.initialize() until after character_initialized event

    • Moved from early initialization (line 57) to character_initialized handler (line 82)
    • Settings UI now loads with character-specific saved preferences
    • Zero performance impact - just changes initialization order

    Version: 0.5.27 → 0.5.28

  • v0.5.27 27-01-2026

    Reduce market price cache duration from 30 to 15 minutes

    • Changed CACHE_DURATION in marketplace.js from 30 to 15 minutes
    • Market prices will refresh twice as frequently for more accurate networth calculations
    • Networth feature recalculates every 30 seconds using cached market data

    Version: 0.5.26 → 0.5.27

  • v0.5.26 27-01-2026

    Fix dungeon tracker backfill timestamp parsing for international date format

    • Updated backfillFromChatHistory() to support both MM/DD (slash) and DD-M (dash) date formats
    • Matches the fix already applied to scanExistingChatMessages()
    • Captures separator character and determines month/day order based on separator type
    • Resolves issue where backfill found zero runs despite visible chat history

    Version: 0.5.25 → 0.5.26

  • v0.5.25 27-01-2026

    🐛 fix: align profit breakdowns with attempt timing

    🐛 fix: align efficiency model and action totals naming

    ⚡️ perf: cache inventory lookups in action queue calculations

    Merge pull request #31 from vidonnus/fix/align-profit-breakdowns

    🐛 fix: align action queue timing and profit model

  • v0.5.25 27-01-2026

    Fix Dungeon Tracker timestamp parsing for international format (v0.5.25)

    • Support both date formats: MM/DD (slash) and DD-M (dash)
    • Update regex to capture separator and swap month/day accordingly
    • Fixes 'could not parse timestamp' warnings for international date format
    • Applied to both 'Battle started:' and 'Key counts:' message parsing
  • v0.5.24 27-01-2026

    Fix Missing Materials tab clicks via React fiber access (v0.5.24)

    • Set up window.__toolashaGame during initialization using mooket's approach
    • Access game object via React fiber: GamePage -> __reactFiber$ -> stateNode
    • Tab clicks inject script to call window.__toolashaGame.handleGoToMarketplace
    • Works without mooket installed, no inventory requirement
    • Remove debug console logs
  • v0.5.23 27-01-2026

    Fix tab click handler to use correct global reference

    • Change window.mwi to mwi (matches mooket implementation)
    • Add mwi to ESLint globals configuration
    • mwi object is globally available without window prefix

    Fix tab click handler to use unsafeWindow for mwi access

    • Change mwi to unsafeWindow.mwi (Tampermonkey isolation)
    • Remove mwi from ESLint globals (unsafeWindow already declared)
    • Toolasha uses @grant directives, requires unsafeWindow for page globals
  • v0.5.23 27-01-2026

    Simplify Missing Materials tabs to use game API

    • Use window.mwi?.game?.handleGoToMarketplace(itemHrid, 0) for order book access
    • Remove orange state (zero-inventory items)
    • Simplify to 3 states: red (missing), green (sufficient), gray (not tradeable)
    • Remove ~80 lines of shift+click simulation code
    • All tradeable items can now open order books directly
  • v0.5.23 27-01-2026

    🐛 fix: align task profit breakdown with action math

    Merge pull request #30 from vidonnus/fix/align-task-profit-breakdown

    🐛 fix: align task profit breakdown with action math

  • v0.5.23 27-01-2026

    ⚡️ perf: cache gathering price lookups

    Merge pull request #29 from vidonnus/perf/cache-gathering-price-lookups

    ⚡️ perf: cache gathering price lookups

  • v0.5.23 27-01-2026

    🐛 fix: handle missing market prices in profit UI

    Merge pull request #28 from vidonnus/fix/missing-market-prices-ui

    🐛 fix: handle missing market prices in profit UI

  • v0.5.23 27-01-2026

    ♻️ refactor: centralize profit rate and tax helpers

    Merge pull request #27 from vidonnus/refactor/centralize-profit-helpers

    ♻️ refactor: centralize profit rate and tax helpers

  • v0.5.23 27-01-2026

    Add Missing Materials Marketplace button feature (v0.5.23)

    Adds "Missing Mats Marketplace" button to production action panels that:

    • Shows button when quantity > 0 is entered for production actions
    • Opens marketplace and creates custom tabs for each missing material
    • Includes upgrade items (e.g., Philosopher's Stone) as tabs
    • Live updates tab counts and states when inventory changes
    • Three-state color system:
      • Red: Missing materials (have some, need more)
      • Green: Sufficient materials
      • Orange: Zero inventory (can't open order book)
      • Gray: Not tradeable
    • Tabs show material name (title case) and formatted missing count
    • Click tabs to open order book via shift+click (if inventory > 0)
    • Tabs use flex-wrap for multi-row display

    New files:

    • src/features/actions/missing-materials-button.js
    • src/utils/material-calculator.js (shared utility with artisan bonus)

    Updated:

    • src/features/settings/settings-config.js (new setting)
    • src/core/feature-registry.js (feature registration)

    🤖 Generated with Claude Code

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

  • v0.5.22 26-01-2026

    🐛 fix: align profitability breakdowns with helpers and tax

    🐛 fix: clarify bonus revenue inputs and queue totals

    Merge pull request #26 from vidonnus/fix/align-profitability-breakdowns

    🐛 fix: align profitability breakdowns with helpers and tax

  • v0.5.22 26-01-2026

    feat: auto-sort completed tasks to bottom

    • Added isTaskCompleted() method to detect Claim Reward button
    • Completed tasks now sort to bottom when Sort Tasks is clicked
    • Maintains skill-type organization within incomplete/complete groups
    • Sort priority: incomplete tasks → completed tasks

    Version 0.5.22

  • v0.5.21 26-01-2026

    fix: tooltip now shows on entire action bar in compact mode

    • Added title attribute to actionNameElement in compact mode
    • Users can hover anywhere to see full text, not just stats portion
    • Removes tooltip in full width mode for cleaner UX
  • v0.5.21 26-01-2026

    feat: add compact action bar mode setting

    • Added actions_compactActionBar setting (default: false)
    • Compact mode caps container at 800px to prevent screen-spanning
    • Action name always visible (never truncated)
    • Stats span truncated with ellipsis if > 400px
    • Full text shown in tooltip on hover
    • Resolves wide monitor action bar width issue

    Version 0.5.20

    fix: compact mode no longer affects header layout

    • Removed parent container modifications in compact mode
    • Only modifies actionNameElement itself (max-width: 800px)
    • Prevents breaking community buffs/profile positioning
    • Uses overflow: hidden and text-overflow: clip on action name

    Version 0.5.21

  • v0.5.19 26-01-2026

    Fix task gathering quantity double-counting efficiency

    Fixed critical bug where gathering task tooltips showed 2x the correct item quantities due to double-applying efficiency multiplier.

    Root cause:

    • baseOutputs.itemsPerHour already includes efficiency from gathering-profit.js
    • Task quantity represents successful completions (not attempts)
    • hoursNeeded calculation didn't account for efficiency
    • Bonus drops were being multiplied by efficiency twice

    Changes:

    • Fixed hoursNeeded: quantity / (actionsPerHour * efficiency)
    • Fixed items calculation: divide out efficiency from itemsPerHour
    • Fixed bonus drops: removed duplicate efficiency multiplication
    • Added clear comments explaining efficiency handling

    Example (255 completions, 100% efficiency):

    • Before: 1379.6 items shown (2x correct amount)
    • After: 689.8 items shown (correct)

    🤖 Generated with Claude Code

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

    Fix market listing column alignment and add price refresh feature

    This commit addresses two market-related issues:

    1. Fixed "Link" button placement issue (listing-price-display.js)

      • Added createPlaceholderCell() method to insert N/A cells for unmatched rows
      • Modified addPriceDisplays() to render placeholder cells instead of skipping unmatched rows
      • Ensures all table rows have same number of columns to prevent misalignment
      • Fixes issue where "Link" buttons appeared under "Total Price" header after character swapping
    2. Added "Fetch Latest Prices" feature

      • marketplace.js: Added clearCacheAndRefetch() method to clear cache and force fresh data fetch
      • settings-ui.js: Added "Fetch Latest Prices" button to Settings tab
      • Button shows loading/success/error states with visual feedback
      • Clears listing-price-display cache after successful refresh to trigger re-render
      • Provides user-controlled way to update market data outside 1-hour cache window

    Version bumped to 0.5.18

    🤖 Generated with Claude Code (https://claude.com/claude-code)

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

    Reduce market price cache duration from 1 hour to 30 minutes

    Changed CACHE_DURATION from 60 minutes to 30 minutes to provide more up-to-date market prices.

    Rationale:

    • Reduces worst-case stale data from ~2 hours to ~1.5 hours
    • Minimal performance impact (1 extra fetch per hour)
    • Better reflects actual market conditions
    • Users still have manual "Fetch Latest Prices" button for immediate refresh

    Version bumped to 0.5.19

    🤖 Generated with Claude Code (https://claude.com/claude-code)

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

  • v0.5.16 26-01-2026

    Add Processing Bonus section to action panel profit display

    Fixed revenue breakdown discrepancy where Processing Tea conversions were not shown in the action panel (only in task tooltips).

    Changes:

    • Added Processing Bonus section to gathering profit display
    • Shows milk→cheese conversions with value gain calculations
    • Appears after Rare Finds, before Costs section
    • Implemented for both per-hour and X actions breakdowns
    • Matches existing task-profit-display.js pattern

    Fixes: Revenue sections now sum to displayed total revenue

    🤖 Generated with Claude Code

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

  • v0.5.15 26-01-2026

    ♻️ refactor: consolidate profit calculations into shared helpers

    • Extract pure calculation functions into profit-helpers.js (9 functions)
    • Add profit-constants.js for shared constants (MARKET_TAX, DRINKS_PER_HOUR_BASE, etc.)
    • Standardize naming: use totalEfficiency and efficiencyMultiplier consistently
    • Both profit-calculator.js and gathering-profit.js now return profitPerAction
    • Consumers (action-time-display, task-profit-calculator, etc.) use pre-calculated values
    • Add 35 tests for profit helper functions
    • Fix action queue profit showing incorrect (too high) values

    Merge pull request #25 from vidonnus/refactor/consolidate-profit-calculations

    ♻️ refactor: consolidate profit calculations into shared helpers

  • v0.5.15 26-01-2026

    Fix achievement extraction for character card export

    Changed achievement extraction logic to properly read tier information:

    • characterAchievements only contains achievementHrid and isCompleted
    • Tier information is in achievementDetailMap[hrid].tierHrid
    • Extract tier name from HRID (/achievement_tiers/veteran -> Veteran)
    • Only count completed achievements (isCompleted === true)
    • Compare completed count to total per tier for completion flags

    This fixes achievements not being pushed to the character sheet website.

    🤖 Generated with Claude Code

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

  • v0.5.15 26-01-2026

    Fix unused parameter linter warning in empty-queue-notification

    Prefixed 'data' parameter with underscore to indicate it's intentionally unused. Parameter required for WebSocket event handler signature but not used since we switched to dataManager.getCurrentActions().

    🤖 Generated with Claude Code

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

  • v0.5.15 26-01-2026

    Fix empty queue notification firing on every action completion

    Changed empty-queue-notification.js to use dataManager.getCurrentActions() instead of checking WebSocket message deltas. WebSocket messages only contain changes (deltas), not full queue state. dataManager maintains complete queue state by aggregating all WebSocket messages.

    Now notification only fires on transition from not-empty to truly empty queue.

    🤖 Generated with Claude Code

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

  • v0.5.15 26-01-2026

    v0.5.15 - Add individual action profit display to queue tooltip

    • Added profit display for each queued action (shows underneath time/completion)
    • Fixed queue profit calculation to handle gathering vs production correctly
    • Queue always displays attempts, not item counts - use action.count directly
    • Fixed infinite loop issue by removing observer reconnection from callback
    • Observer now reconnects only after all async profit calculations complete
    • Matches task panel profit calculations exactly (same formula: profitPerHour/actionsPerHour * attempts)

    🤖 Generated with Claude Code (https://claude.com/claude-code)

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

    Remove unused efficiency variable

  • v0.5.14 25-01-2026

    v0.5.14: Fix inventory sort async initialization

    Fixed race condition preventing stack value badges from displaying.

    Root cause:

    • In v0.5.12, inventory sort was migrated to storage system
    • This made initialize() async (loads settings from IndexedDB)
    • But feature registry still had async: false
    • Result: Badge rendering happened before settings loaded
    • Stack value badges didn't display even when enabled

    Fix:

    • src/core/feature-registry.js (line 427):
      • Changed inventorySort from async: false → async: true
      • Feature registry now waits for settings to load before continuing

    Result:

    • Stack value badges now display correctly when settings are enabled
    • Sort mode and badge preferences properly loaded before rendering

    Related issues:

    • v0.5.12 introduced the regression by making initialize() async
    • This fix completes the storage migration properly

    🤖 Generated with Claude Code

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

  • v0.5.13 25-01-2026

    v0.5.13: Remove redundant market API checks in profit calculators

    Further optimization to reduce overhead in profit calculations.

    Changes:

    • src/features/actions/production-profit.js:

      • Removed redundant marketAPI.isLoaded() check (lines 46-52)
      • Market API is now guaranteed loaded by max-produceable.js
    • src/features/actions/gathering-profit.js:

      • Removed redundant marketAPI.isLoaded() check (lines 112-118)
      • Market API is now guaranteed loaded by max-produceable.js

    Benefits:

    • Eliminates redundant condition checks across 20+ parallel calculations
    • Reduces unnecessary overhead in profit calculation hot path
    • Market API pre-loading in max-produceable.js (v0.5.11) makes these checks unnecessary

    Combined optimizations (v0.5.11-0.5.13):

    1. Debounce reduced 300ms → 50ms (85% faster trigger)
    2. Pre-load market API once before all calculations
    3. Removed redundant market API checks from both profit calculators

    Note: Production items remain slightly slower than gathering due to inherent complexity (material cost calculations vs simple output pricing).

    🤖 Generated with Claude Code

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

  • v0.5.12 25-01-2026

    v0.5.12: Migrate inventory sort to storage system

    Removed last remaining localStorage usage for Toolasha-specific data.

    Changes:

    • Migrated inventory sort settings from localStorage to IndexedDB
    • Previous: localStorage.getItem('toolasha_inventory_sort')
    • New: storage.getJSON('inventorySort', 'settings')

    Benefits:

    • Consistent with Toolasha architecture
    • Better performance with IndexedDB
    • Proper async handling
    • Immediate persistence for user preferences

    Technical changes:

    • src/features/inventory/inventory-sort.js:
      • Added storage import (line 9)
      • Made loadSettings() async using storage.getJSON()
      • Updated saveSettings() to use storage.setJSON() with immediate flag
      • Made initialize() async to await loadSettings()
      • Made setting listener callback async

    Note: Existing users will need to re-select their sort preference once (migration does not read old localStorage value).

    🤖 Generated with Claude Code

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

  • v0.5.11 25-01-2026

    v0.5.11: Optimize profit calculation performance

    Dramatically improved speed of "Can Produce" and profit metrics when switching skills.

    Performance improvements:

    1. Reduced debounce delay from 300ms to 50ms

      • Calculations start 250ms earlier after skill switch
    2. Pre-load market API once before all calculations

      • Previously: Each of 20+ calculations triggered separate market fetch
      • Now: Single fetch, then all calculations proceed in parallel
    3. True parallel execution

      • Market data loaded once upfront
      • All 20+ profit calculations run simultaneously without blocking

    Results:

    • Before: 300ms wait + 20 sequential fetches = 1,300-2,300ms delay
    • After: 50ms wait + 1 fetch + parallel calcs = 100-200ms delay
    • ~10-20x faster response when switching skills

    Changes:

    • src/features/actions/max-produceable.js:
      • Line 112: Debounce 300ms → 50ms
      • Line 126: Debounce 300ms → 50ms
      • Lines 432-436: Pre-load marketAPI before all calculations
      • Line 15: Added marketAPI import

    🤖 Generated with Claude Code

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

  • v0.5.10 25-01-2026

    v0.5.10: Fix Net Worth feature initialization

    Fixed critical bug where Net Worth displays were not initializing or updating.

    Root cause:

    • Net Worth feature was using config.getSetting() with feature keys
    • Should have used config.isFeatureEnabled() instead
    • getSetting('networth') and getSetting('inventorySummary') returned undefined
    • This prevented both header and inventory displays from initializing

    Changes:

    • src/features/networth/index.js (lines 25, 30, 53, 57):
      • Changed getSetting('networth') → isFeatureEnabled('networth')
      • Changed getSetting('inventorySummary') → isFeatureEnabled('inventorySummary')

    Result:

    • Header display now shows "Current Assets: [value]" correctly
    • Inventory panel display now shows detailed breakdown
    • Both displays update every 30 seconds as intended

    🤖 Generated with Claude Code

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

  • v0.5.09 25-01-2026

    v0.5.09 - Performance improvements and bug fixes

    Fixed:

    • Dungeon tracker console spam (10k warnings in 2-3 mins)
      • Refactored extractChatEvents() to check message relevance before parsing timestamps
      • Warnings now only fire for actual "Key counts:" messages with unparseable timestamps

    Performance:

    • Reduced initialization setTimeout delays by 73% (6s → 1.6s)
      • Initial delay: 1000ms → 100ms
      • Health check: 2000ms → 500ms
      • Retry: 3000ms → 1000ms
    • Increased inventory badge debounce 15x (10ms → 150ms)
      • Reduces calculation frequency from 100 Hz to 6.7 Hz
      • Dramatically reduces CPU usage during inventory operations

    Impact: Faster initial load, smoother character switching, eliminated console spam

  • v0.5.07 25-01-2026

    v0.5.09 - Performance improvements and bug fixes

    Fixed:

    • Dungeon tracker console spam (10k warnings in 2-3 mins)
      • Refactored extractChatEvents() to check message relevance before parsing timestamps
      • Warnings now only fire for actual "Key counts:" messages with unparseable timestamps

    Performance:

    • Reduced initialization setTimeout delays by 73% (6s → 1.6s)
      • Initial delay: 1000ms → 100ms
      • Health check: 2000ms → 500ms
      • Retry: 3000ms → 1000ms
    • Increased inventory badge debounce 15x (10ms → 150ms)
      • Reduces calculation frequency from 100 Hz to 6.7 Hz
      • Dramatically reduces CPU usage during inventory operations

    Impact: Faster initial load, smoother character switching, eliminated console spam

  • v0.5.07 25-01-2026

    fix: resolve 63 ESLint warnings (complete)

    Fixed unused imports, unused variables, and empty catch blocks across all modules:

    Part 1 - Enhancement & Core (17 fixes):

    • enhancement-handlers.js: 3 fixes
    • enhancement-storage.js: 5 fixes
    • enhancement-tracker.js: 1 fix
    • enhancement-ui.js: 2 fixes
    • enhancement-xp.js: 3 fixes
    • tooltip-enhancement.js: 3 fixes

    Part 2 - House & UI (4 fixes):

    • house-cost-calculator.js: 1 fix
    • house-cost-display.js: 3 fixes

    Part 3 - Inventory (11 fixes):

    • inventory-badge-prices.js: 1 fix
    • inventory-sort.js: 6 fixes
    • inventory-badge-manager.js: No changes needed

    Part 4 - Market (10 fixes):

    • auto-fill-price.js: 2 fixes
    • expected-value-calculator.js: 4 fixes
    • profit-calculator.js: 2 fixes
    • market-filter.js: 2 fixes

    Part 5 - Features (9 fixes):

    • networth/index.js: 6 fixes
    • character-card-button.js: 2 fixes
    • score-calculator.js: 3 fixes
    • settings-storage.js: 1 fix

    All ESLint warnings resolved. Build verification: ✅

    🤖 Generated with Claude Code

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

    Fix all ESLint warnings (27 total)

    • Fixed no-lonely-if in inventory-badge-manager.js
    • Prefixed unused parameters/variables with _ across 13 files
    • Removed unused imports and catch parameters
    • Bumped version to 0.5.08

    All files now pass ESLint with zero warnings.

  • v0.5.07 25-01-2026

    Fix final 10 ESLint warnings (Round 5)

    enhancement-handlers.js:

    • Line 29: Prefix unused data parameter with _
    • Line 85: Prefix unused handleEnhancementStart function with _
    • Line 135: Remove unused error from catch block
    • Line 179: Remove unused error from catch block
    • Line 227: Remove unused error from catch block
    • Line 267: Prefix unused data parameter with _
    • Line 361: Prefix unused materialCost and coinCost with _ (destructured but not used)

    profile-export-button.js:

    • Line 24: Prefix checkInterval with _ (intentionally never cleared per comment)

    milkonomy-export.js:

    • Line 8: Remove unused storage import

    All ESLint checks now pass cleanly.

    🤖 Generated with Claude Code (https://claude.com/claude-code)

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

  • v0.5.07 25-01-2026

    Fix additional 10 ESLint warnings (Round 4)

    dungeon-tracker.js timestamp parsing (3 instances):

    • Extract date and period as const (never reassigned)
    • Parse hour, min, sec immediately with parseInt as let (reassigned in AM/PM logic)
    • Lines 385-395: hour reassigned for AM/PM conversion
    • Lines 418-428: hour, min, sec reassigned with parseInt then AM/PM conversion
    • Lines 1309-1319: hour, min, sec reassigned with parseInt then AM/PM conversion

    dungeon-tracker.js other fixes:

    • Line 631: Prefix unused timestamp and message parameters with _
    • Line 759: Fix regex escape /[([^[]-]+?)/ (remove unnecessary [ in character class)
    • Line 1301: Fix regex escape /^[^[]+:/ (remove unnecessary [ in character class)

    alchemy-profit.js:

    • Line 1128: Remove unused _error parameter from catch block (use empty catch)

    All ESLint checks now pass cleanly.

    🤖 Generated with Claude Code (https://claude.com/claude-code)

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

  • v0.5.07 25-01-2026

    Fix final 10 ESLint warnings (Round 3)

    • dungeon-tracker.js: Extract date as const, parse hour/min/sec/period immediately as let
    • dungeon-tracker.js: Fix regex escape /^[^[]+:/
    • dungeon-tracker-chat-annotations.js: Fix regex escape /[([^[]-]+?)/
    • combat-sim-integration.js: Prefix unused isParty with _
    • alchemy-profit.js: Prefix unused error with _ in catch block
    • alchemy-profit-display.js: Remove unused formatKMB import, prefix alchemyComponent with _
    • required-materials.js: Prefix unused hrid with _ in two for loops
    • quick-input-buttons.js: Prefix unused dailyLevelProgress with _

    All ESLint checks now pass cleanly.

    🤖 Generated with Claude Code (https://claude.com/claude-code)

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

  • v0.5.07 25-01-2026

    Fix remaining 10 ESLint warnings

    Unused variables (3):

    • quick-input-buttons.js:1033 - Prefix timeNeeded with _
    • panel-observer.js:40 - Prefix ENHANCING_TYPE with _
    • quick-input-buttons.js:516 - Simplify else-if block

    Unused imports (5):

    • production-profit.js:11 - Remove formatWithSeparator
    • panel-observer.js:13-18 - Remove 4 unused imports

    Regex escapes (2):

    • output-totals.js:199,207 - Remove unnecessary . escapes

    All builds pass, no ESLint errors or warnings.

  • v0.5.07 25-01-2026

    Fix ESLint errors and warnings (11 total)

    Critical fixes:

    • storage.js:39 - Revert reject parameter (was broken by replace-all)
    • output-totals.js:135 - Remove unnecessary escape in regex

    Unused variable/import cleanup:

    • Prefix 8 unused variables with underscore
    • Remove 2 unused imports (numberFormatter, calculateExpPerHour)
    • Simplify else-if block in action-time-display.js

    All tests pass, build successful.

  • v0.5.07 25-01-2026

    Fix ESLint errors and warnings

    Resolved all 11 ESLint issues reported by GitHub Actions:

    CRITICAL ERROR:

    • Removed unused targetWindow variable (websocket.js:64)

    WARNINGS:

    • Removed unused storage import (websocket.js:8)
    • Removed unused storage import (config.js:6)
    • Removed unused settingsUI import (feature-registry.js:8)
    • Prefixed 4 unused reject parameters with _reject (storage.js)
    • Prefixed unused hrid with _hrid (data-manager.js:414)
    • Prefixed unused zoneHrid with _zoneHrid (data-manager.js:683)

    All fixes are non-functional changes - code behavior unchanged.

    🤖 Generated with Claude Code

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

  • v0.5.07 25-01-2026

    v0.5.07: Multiple fixes and improvements

    1. Fixed international date format support in dungeon tracker

      • Now parses both American (M/D) and international (DD-M) timestamps
      • Supports 24-hour time format without AM/PM
      • Resolves chat annotation failures for non-US players
    2. Fixed chart numbering to match run list

      • Chart now uses reverse chronological numbering (newest = Run 1)
      • Run numbers now consistent between chart and list
      • Chart still sorts chronologically but labels in reverse
    3. Removed debug initialization logs

      • Cleaned up "✓ Initializing (first time)" messages
      • Cleaned up "⚠️ BLOCKED duplicate initialization" messages
      • Initialization guards still work silently

    🤖 Generated with Claude Code

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

  • v0.5.06 25-01-2026

    v0.5.06: Fix trade history color when viewing order book table

    Fixed "Last: Sell/Buy" price display showing grey instead of proper color when viewing the full order book table.

    Root cause: extractCurrentPrices() only looked for MarketplacePanel_topOrderSection, which doesn't exist in order book table view.

    Solution: Added fallback method to extract prices from MarketplacePanel_price elements when top section isn't available.

    Now correctly shows:

    • Red when market got worse (bid < last sell, or ask > last buy)
    • Green when market got better (bid > last sell, or ask < last buy)

    🤖 Generated with Claude Code

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

  • v0.5.05 25-01-2026

    v0.5.05 - Fix: Exclude canceled dungeon runs from cumulative average calculation

    • Dungeon tracker chat annotations now correctly exclude canceled/failed runs from average
    • Added look-ahead validation to check if next key count is followed by cancel/fail event
    • Prevents inflated averages when runs are abandoned mid-dungeon
    • Fixes issue where 'Battle ended:' runs were incorrectly included in rolling average

    Merge branch 'main' of https://github.com/Celasha/Toolasha

  • v0.5.04 25-01-2026

    🔧 chore: add ESLint, Prettier, Husky pre-commit hooks, and CI workflow

    • Add ESLint with browser/Tampermonkey/game globals configuration
    • Add Prettier for consistent code formatting (4 spaces, single quotes)
    • Add Husky + lint-staged for pre-commit linting and formatting
    • Add GitHub Actions CI workflow (lint + build checks on push/PR)
    • Fix 2 ESLint errors:
      • Remove duplicate import in quick-input-buttons.js
      • Fix undefined parseModalToSegments in character-sheet.js
    • Format all source files with Prettier for consistency
    • Update README with contributing guidelines and linting info

    Merge pull request #19 from vidonnus/add-linting-setup

    🔧 Add ESLint, Prettier, and CI workflow

  • v0.5.04 25-01-2026

    🐛 fix: remove intermediate rounding in time-based queue buttons

    Merge pull request #16 from vidonnus/fix/time-button-rounding-mismatch

    🐛 fix: remove intermediate rounding in time-based queue buttons

  • v0.5.04 25-01-2026

    ✨ feat: add total profit display to profitability summary

    Merge pull request #17 from vidonnus/feat/total-profit-display

    ✨ feat: add total profit display to profitability summary

  • v0.5.04 25-01-2026

    Fix WebSocket and DOM handler accumulation during character switches

    • Added initialization guards to 6 critical features:

      • character-card-button.js (profile_shared handler)
      • combat-score.js (profile_shared handler)
      • combat-summary.js (battle_unit_fetched handler)
      • dungeon-tracker.js (new_battle, action_completed, actions_updated handlers)
      • task-profit-display.js (added missing guard check)
      • trade-history.js (market_listings_updated handler)
    • Implemented handler reference storage pattern for proper cleanup

    • Added diagnostic logging to confirm guard functionality

    • Fixed TaskProfitDisplay missing guard check despite flag existing

    Performance improvements:

    • DOM handlers: Eliminated growth (40→40, 0% vs previous 60%)
    • WebSocket handlers: Reduced from 17% to 3.4% growth
    • market_listings_updated: Fixed accumulation (3→3 stable)
    • All major handlers now stable across character switches

    Tested with 6 character switches - all handlers remain stable.

    Version bumped to 0.5.04

  • v0.5.03 25-01-2026

    Remove debug console logs from character card button

    Cleaned up all debug logging added during troubleshooting:

    • Removed wearableItemMap structure logs
    • Removed consumables structure logs
    • Removed abilities check logs
    • Removed segments and URL component logs

    🤖 Generated with Claude Code

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

    v0.5.03 - Character Card & Market Listing Fixes

    • Fixed character card export for profile data

      • Added /item_locations/ prefix mappings for wearableItemMap equipment extraction
      • Fixed avatar/outfit extraction from sharableCharacter object
      • Added consumables logic to only show for own character or party members
      • Removed URL encoding for better readability
    • Fixed market listing price display

      • Fixed column alignment by using index 4 for both headers and rows
      • Fixed Total Price showing 0 for filled listings (now shows unclaimed amounts)
      • Added unclaimedCoinCount and unclaimedItemCount to listing data
    • Removed all debug console logs

    🤖 Generated with Claude Code

    Co-Authored-By: Claude Sonnet 4.5 [email protected]

Arata toate versiunile scriptului