# celasha/toolasha architecture

> Architecture diagram of the GitHub repository celasha/toolasha, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-09). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/celasha/toolasha
- Repository: https://github.com/celasha/toolasha

## Overview

Toolasha is a modular Milky Way Idle userscript that adds configurable game-interface enhancements, market and crafting analysis, and combat tracking and simulation. The primary workflow begins when the script starts in the game: it initializes shared storage and settings, observes game data and DOM changes, then enables feature modules that present overlays, calculations, trackers, and controls. Market pricing and combat tools are substantial parallel capabilities. The graph emphasizes documented feature areas; several feature-to-feature runtime links are not established by the sampled excerpts, so they are omitted.

Main entry points: [`src/main.js`](https://github.com/celasha/toolasha/blob/main/src/main.js) (Startup orchestration), [`src/core/storage.js`](https://github.com/celasha/toolasha/blob/main/src/core/storage.js) (IndexedDB storage), [`src/core/config.js`](https://github.com/celasha/toolasha/blob/main/src/core/config.js) (Settings and features), [`src/core/data-manager.js`](https://github.com/celasha/toolasha/blob/main/src/core/data-manager.js) (Game data manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Runtime foundation"]
  node_main["Startup orchestration<br/>[main.js]"]
  node_settings["Settings and features<br/>[config.js]"]
  node_settingstore["Settings persistence"]
  node_storage[("IndexedDB storage<br/>[storage.js]")]
  node_data["Game data manager<br/>[data-manager.js]"]
  node_websocket["WebSocket hook<br/>[websocket.js]"]
  node_observer["DOM observer<br/>[dom-observer.js]"]
  node_registry["Feature registry"]
end

subgraph group_economy["Market and economy"]
  node_marketapi["Marketplace API<br/>[marketplace.js]"]
  node_marketvalues["Market values API<br/>[market-values.js]"]
  node_markettools["Market analysis tools"]
  node_networth["Net worth valuation"]
  node_inventory["Inventory badges"]
end

subgraph group_combat["Combat and dungeons"]
  node_combatstats["Combat statistics"]
  node_dungeon["Dungeon tracking<br/>[dungeon-tracker.js]"]
  node_combatlive["Live combat tracking<br/>[combat-live.js]"]
  node_sim["Combat simulation<br/>[combat-sim.js]"]
  node_simengine["Simulation engine"]
end

subgraph group_gameplay["Gameplay features"]
  node_alchemy["Alchemy history and profit<br/>[alchemy-profit.js]"]
  node_crafting["Crafting plans"]
  node_actions["Action enhancements"]
  node_tasks["Task tools"]
  node_enhancement["Enhancement tools"]
end

subgraph group_presentation["Interface and activity"]
  node_settingsui["Settings interface<br/>[settings-ui.js]"]
  node_charactivity["Character activity display"]
  node_chat["Chat enhancements<br/>[pop-out-chat.js]"]
  node_ui["UI enhancements"]
end

node_player(("Player"))
node_game["Milky Way Idle"]

node_player -->|"uses"| node_game
node_game -.->|"loads"| node_main
node_main -->|"installs"| node_websocket
node_main -->|"starts"| node_observer
node_main -->|"initializes"| node_storage
node_main -->|"initializes"| node_settings
node_main -->|"starts refresh"| node_marketapi
node_main -->|"fetches and refreshes"| node_marketvalues
node_main -->|"starts watching"| node_charactivity
node_settings -->|"loads and saves"| node_settingstore
node_settingstore -->|"persists settings"| node_storage
node_settings -->|"gets character ID"| node_data
node_main -.->|"initializes features"| node_registry
node_marketapi -->|"reads and writes cache"| node_storage
node_data -->|"reads action progress"| node_storage
node_data -->|"receives updates"| node_websocket
node_inventory -->|"observes DOM"| node_observer
node_combatstats -->|"uses market data"| node_marketapi
node_combatstats -->|"uses game data"| node_data
node_sim -.->|"runs simulations"| node_simengine
node_charactivity -->|"watches DOM"| node_observer
node_charactivity -->|"loads activity data"| node_storage
node_settingsui -.->|"configures features"| node_settings
node_player -.->|"configures"| node_settingsui

click node_main "https://github.com/celasha/toolasha/blob/main/src/main.js"
click node_settings "https://github.com/celasha/toolasha/blob/main/src/core/config.js"
click node_settingstore "https://github.com/celasha/toolasha/blob/main/src/core/settings-storage.js"
click node_storage "https://github.com/celasha/toolasha/blob/main/src/core/storage.js"
click node_data "https://github.com/celasha/toolasha/blob/main/src/core/data-manager.js"
click node_websocket "https://github.com/celasha/toolasha/blob/main/src/core/websocket.js"
click node_observer "https://github.com/celasha/toolasha/blob/main/src/core/dom-observer.js"
click node_registry "https://github.com/celasha/toolasha/blob/main/src/core/feature-registry.js"
click node_marketapi "https://github.com/celasha/toolasha/blob/main/src/api/marketplace.js"
click node_marketvalues "https://github.com/celasha/toolasha/blob/main/src/api/market-values.js"
click node_markettools "https://github.com/celasha/toolasha/blob/main/src/features/market/expected-value-calculator.js"
click node_networth "https://github.com/celasha/toolasha/blob/main/src/features/networth/networth-calculator.js"
click node_inventory "https://github.com/celasha/toolasha/blob/main/src/features/inventory/inventory-badge-manager.js"
click node_alchemy "https://github.com/celasha/toolasha/blob/main/src/features/alchemy/alchemy-profit.js"
click node_crafting "https://github.com/celasha/toolasha/blob/main/src/features/crafting-plan/crafting-plan-calculator.js"
click node_actions "https://github.com/celasha/toolasha/blob/main/src/features/actions/production-profit.js"
click node_tasks "https://github.com/celasha/toolasha/blob/main/src/features/tasks/task-profit-calculator.js"
click node_enhancement "https://github.com/celasha/toolasha/blob/main/src/features/enhancement/enhancement-feature.js"
click node_combatstats "https://github.com/celasha/toolasha/blob/main/src/features/combat-stats/combat-stats-calculator.js"
click node_dungeon "https://github.com/celasha/toolasha/blob/main/src/features/combat/dungeon-tracker.js"
click node_combatlive "https://github.com/celasha/toolasha/blob/main/src/features/combat-live/combat-live.js"
click node_sim "https://github.com/celasha/toolasha/blob/main/src/features/combat-sim/combat-sim.js"
click node_simengine "https://github.com/celasha/toolasha/blob/main/src/features/combat-sim/engine/combat-simulator.js"
click node_settingsui "https://github.com/celasha/toolasha/blob/main/src/features/settings/settings-ui.js"
click node_charactivity "https://github.com/celasha/toolasha/blob/main/src/features/character-activity/character-select-renderer.js"
click node_chat "https://github.com/celasha/toolasha/blob/main/src/features/chat/pop-out-chat.js"
click node_ui "https://github.com/celasha/toolasha/blob/main/src/features/ui/draggable-modals.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_settings,node_settingstore,node_storage,node_data,node_websocket,node_observer,node_registry toneBlue
class node_marketapi,node_marketvalues,node_markettools,node_networth,node_inventory toneAmber
class node_combatstats,node_dungeon,node_combatlive,node_sim,node_simengine toneMint
class node_alchemy,node_crafting,node_actions,node_tasks,node_enhancement toneRose
class node_settingsui,node_charactivity,node_chat,node_ui,node_player,node_game toneIndigo
```

## Components

### Runtime foundation

- [Startup orchestration](https://github.com/celasha/toolasha/blob/main/src/main.js): `src/main.js`
- [Settings and features](https://github.com/celasha/toolasha/blob/main/src/core/config.js): `src/core/config.js`
- [Settings persistence](https://github.com/celasha/toolasha/blob/main/src/core/settings-storage.js): `src/core/settings-storage.js`
- [IndexedDB storage](https://github.com/celasha/toolasha/blob/main/src/core/storage.js): `src/core/storage.js`
- [Game data manager](https://github.com/celasha/toolasha/blob/main/src/core/data-manager.js): `src/core/data-manager.js`
- [WebSocket hook](https://github.com/celasha/toolasha/blob/main/src/core/websocket.js): `src/core/websocket.js`
- [DOM observer](https://github.com/celasha/toolasha/blob/main/src/core/dom-observer.js): `src/core/dom-observer.js`
- [Feature registry](https://github.com/celasha/toolasha/blob/main/src/core/feature-registry.js): `src/core/feature-registry.js`

### Market and economy

- [Marketplace API](https://github.com/celasha/toolasha/blob/main/src/api/marketplace.js): `src/api/marketplace.js`
- [Market values API](https://github.com/celasha/toolasha/blob/main/src/api/market-values.js): `src/api/market-values.js`
- [Market analysis tools](https://github.com/celasha/toolasha/blob/main/src/features/market/expected-value-calculator.js): `src/features/market/expected-value-calculator.js`
- [Net worth valuation](https://github.com/celasha/toolasha/blob/main/src/features/networth/networth-calculator.js): `src/features/networth/networth-calculator.js`
- [Inventory badges](https://github.com/celasha/toolasha/blob/main/src/features/inventory/inventory-badge-manager.js): `src/features/inventory/inventory-badge-manager.js`

### Combat and dungeons

- [Combat statistics](https://github.com/celasha/toolasha/blob/main/src/features/combat-stats/combat-stats-calculator.js): `src/features/combat-stats/combat-stats-calculator.js`
- [Dungeon tracking](https://github.com/celasha/toolasha/blob/main/src/features/combat/dungeon-tracker.js): `src/features/combat/dungeon-tracker.js`
- [Live combat tracking](https://github.com/celasha/toolasha/blob/main/src/features/combat-live/combat-live.js): `src/features/combat-live/combat-live.js`
- [Combat simulation](https://github.com/celasha/toolasha/blob/main/src/features/combat-sim/combat-sim.js): `src/features/combat-sim/combat-sim.js`
- [Simulation engine](https://github.com/celasha/toolasha/blob/main/src/features/combat-sim/engine/combat-simulator.js): `src/features/combat-sim/engine/combat-simulator.js`

### Gameplay features

- [Alchemy history and profit](https://github.com/celasha/toolasha/blob/main/src/features/alchemy/alchemy-profit.js): `src/features/alchemy/alchemy-profit.js`
- [Crafting plans](https://github.com/celasha/toolasha/blob/main/src/features/crafting-plan/crafting-plan-calculator.js): `src/features/crafting-plan/crafting-plan-calculator.js`
- [Action enhancements](https://github.com/celasha/toolasha/blob/main/src/features/actions/production-profit.js): `src/features/actions/production-profit.js`
- [Task tools](https://github.com/celasha/toolasha/blob/main/src/features/tasks/task-profit-calculator.js): `src/features/tasks/task-profit-calculator.js`
- [Enhancement tools](https://github.com/celasha/toolasha/blob/main/src/features/enhancement/enhancement-feature.js): `src/features/enhancement/enhancement-feature.js`

### Interface and activity

- [Settings interface](https://github.com/celasha/toolasha/blob/main/src/features/settings/settings-ui.js): `src/features/settings/settings-ui.js`
- [Character activity display](https://github.com/celasha/toolasha/blob/main/src/features/character-activity/character-select-renderer.js): `src/features/character-activity/character-select-renderer.js`
- [Chat enhancements](https://github.com/celasha/toolasha/blob/main/src/features/chat/pop-out-chat.js): `src/features/chat/pop-out-chat.js`
- [UI enhancements](https://github.com/celasha/toolasha/blob/main/src/features/ui/draggable-modals.js): `src/features/ui/draggable-modals.js`

### Other components

- **Player**
- **Milky Way Idle**

## Connections

- Player → Milky Way Idle: uses
- Milky Way Idle → Startup orchestration: loads
- Startup orchestration → WebSocket hook: installs (evidence: `src/main.js`)
- Startup orchestration → DOM observer: starts (evidence: `src/main.js`)
- Startup orchestration → IndexedDB storage: initializes (evidence: `src/main.js`)
- Startup orchestration → Settings and features: initializes (evidence: `src/main.js`)
- Startup orchestration → Marketplace API: starts refresh (evidence: `src/main.js`)
- Startup orchestration → Market values API: fetches and refreshes (evidence: `src/main.js`)
- Startup orchestration → Character activity display: starts watching (evidence: `src/main.js`)
- Settings and features → Settings persistence: loads and saves (evidence: `src/core/config.js`)
- Settings persistence → IndexedDB storage: persists settings (evidence: `src/core/settings-storage.js`)
- Settings and features → Game data manager: gets character ID (evidence: `src/core/config.js`)
- Startup orchestration → Feature registry: initializes features (evidence: `src/main.js`)
- Marketplace API → IndexedDB storage: reads and writes cache (evidence: `src/api/marketplace.js`)
- Game data manager → IndexedDB storage: reads action progress (evidence: `src/core/data-manager.js`)
- Game data manager → WebSocket hook: receives updates (evidence: `src/core/data-manager.js`)
- Inventory badges → DOM observer: observes DOM (evidence: `src/features/inventory/inventory-badge-manager.js`)
- Combat statistics → Marketplace API: uses market data (evidence: `src/features/combat-stats/combat-stats-calculator.js`)
- Combat statistics → Game data manager: uses game data (evidence: `src/features/combat-stats/combat-stats-calculator.js`)
- Combat simulation → Simulation engine: runs simulations
- Character activity display → DOM observer: watches DOM (evidence: `src/features/character-activity/character-select-renderer.js`)
- Character activity display → IndexedDB storage: loads activity data
- Settings interface → Settings and features: configures features
- Player → Settings interface: configures
