Skip to content

Merge development into main for 1.12.26.2 / Microbot 2.5.5#1762

Merged
chsami merged 91 commits into
mainfrom
development
May 8, 2026
Merged

Merge development into main for 1.12.26.2 / Microbot 2.5.5#1762
chsami merged 91 commits into
mainfrom
development

Conversation

@chsami
Copy link
Copy Markdown
Owner

@chsami chsami commented May 8, 2026

Summary

This PR merges the current development branch into main for the next Microbot release line.

Biggest end-user changes

  • Web Walker / pathfinding reliability improvements: stronger transport handling, door/stair/ladder cross-plane routing, smoother path progression, stall recovery telemetry, and additional pathfinder regression coverage.
  • Agent Server and CLI improvements: authenticated local agent API, profile/script endpoints, runtime script hot-loading, screenshot/state tooling, Varp endpoint, Unix domain socket support, and more robust teardown behavior.
  • Anti-detection hardening: more human-like timing primitives, session fatigue support, randomized walker stamina thresholds, jittered tick waits, natural mouse trajectory updates, per-install identity controls, and reduced identifiable UI/network fingerprints.
  • New script architecture tools: StateMachineScript framework, debug snapshots, example plugin, and expanded authoring docs for agent-driven script development.
  • Settings and login fixes: settings search based interactions, AutoLogin retry backoff, quest/dialogue interaction safeguards, and welcome-screen handling improvements.
  • RuneLite/API updates: upstream cache/API/client updates through 1.12.26.x plus project version bump to 1.12.26.2 and Microbot version 2.5.5.

Developer impact

  • Adds focused unit/regression coverage for walker/pathfinder behavior, Agent Server auth/UDS/Varp handling, random timing helpers, keyboard/mouse utilities, and anti-ban/session fatigue primitives.
  • Adds documentation for Agent Server, runtime script tooling, web walker improvements, and detection-hardening progress.

Validation

  • ./gradlew :client:compileJava completed successfully locally with existing deprecation/unchecked warnings.
  • Live Microbot CLI walker smoke test passed from Varrock Palace to Varrock center (ARRIVED).
  • Temporary dynamic script walker smoke test passed using Rs2Walker.walkWithState from a Script executor thread.
  • Live staircase cross-plane checks passed both directions: ground floor to plane 1 and plane 1 back to ground floor.
  • Temporary dynamic staircase script passed up/down in one run and reported passed: true.

Notes

Local untracked artifacts (.claude/scheduled_tasks.lock, scripts/__pycache__/) were intentionally not included.

chsami and others added 30 commits April 15, 2026 17:09
…e plugin

Introduces an opt-in state machine base class for Microbot scripts that
makes states, transitions, and guard conditions explicit and observable.

Framework classes (statemachine package):
- StateMachineScript<S> — generic base class extending Script with step()
  engine, atomic snapshot publishing, transition trace buffer, and global
  registry for debug discovery
- Transition<S> — immutable transition definition with fluent builder DSL
  (from/when/because/goTo)
- StateSnapshot<S> — immutable point-in-time snapshot for thread-safe
  debug reads from the HTTP handler thread
- PendingTransition<S> — describes transitions available from current state

Agent server integration:
- StateMachineDebugHandler at /debug/snapshot — returns JSON snapshot of
  any registered state machine script (current state, previous state,
  transition reason, pending transitions, recent trace log)

Example plugin (statemachineexample package):
- StateMachineExamplePlugin/Script/Config — test harness cycling through
  CHECK_INVENTORY → COOLDOWN → CHECK_PLAYER → COOLDOWN states

Key design decisions:
- step() method, NOT final run() — preserves existing Script.run() guard
  contract and avoids breaking subclass semantics
- Accepts blocking onState() in v1 (compatible with sleepUntil/walkTo)
- AtomicReference<StateSnapshot> for lock-free debug reads
- Framework catches onState() exceptions to prevent loop death
- Additive API: no changes to Script base class behavior

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- statemachine/CLAUDE.md: developer guide with usage patterns, API reference,
  best practices, troubleshooting, and complete code examples using Queryable API
- statemachine/AGENTS.md: architecture overview, design decisions (why step()
  not run(), blocking states, AtomicReference snapshots), integration points,
  non-negotiable rules, and future work
- Updated root AGENTS.md to reference state machine docs in 'When Unsure' section
- Rewrote example script to demonstrate Queryable API:
  - SCAN_NPCS: Rs2NpcCache.query().within(15).toList/nearest()
  - SCAN_OBJECTS: Rs2TileObjectCache.query().within(10).nearest()
  - SCAN_GROUND_ITEMS: Rs2TileItemCache.query().where(isLootAble).nearest()
  - REPORT: aggregates scan results with player/inventory state

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…dates

- Early return when transport map has no entry for the tile (eliminates
  ~95% of handleTransports calls that were doing nothing)
- Replace getOrDefault(key, new HashSet<>()) with get() + null check
  to avoid allocating empty sets on every miss
- Pre-compute path point index map (HashMap) for O(1) origin/destination
  lookups, replacing three O(n) stream scans per inner iteration
- Hoist path-constant checks (destination-in-path, near-destination,
  origin/destination index ordering) out of the inner loop
- Change plane-mismatch from continue to break (plane is constant)
- Hoist inInstance check out of the main walk loop
- Downgrade all diagnostic log.info to log.debug with isDebugEnabled()
  guards for expensive string formatting
- Regenerate guardrail baseline (lambda index shift from removed streams)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Adds 10 user-configurable hotkeys to the WebWalker side panel, each
rendered inline on its category card via MicrobotHotkeyButton: 8
toggles for the selected target (custom location, bank, deposit box,
slayer master, quest, clue, farming, hunter) and 2 toggles for
"nearest bank" / "nearest deposit box".

Keybinds are stored as hidden @configitem entries so they persist
without cluttering the settings UI. The plugin wires each one
through HotkeyListener; toggleCategory routes start/stop through
the existing panel helpers so logs and walker state match the
Start/Stop buttons.

MicrobotHotkeyButton promoted from package-private to public so the
WebWalker panel can embed it. Also adds a plain ':client:run'
Gradle task alongside the existing 'runDebug' (no JDWP suspend).
Hardcoded CTRL+X stop hotkey is intentionally preserved.
Bound method refs like `panel::getBankTarget` evaluate the receiver at
expression time (JLS 15.13.3), so the null guard inside toggleCategory
was unreachable — an NPE would fire at the method-ref expression before
the check ran. Switched to unbound refs (`ShortestPathPanel::getX`) and
moved dereference behind the null check via a locally-captured panel.
…ction after dialogue

- Add Rs2Dialogue.acceptQuestStartDialogue() to click "Yes" on
  "Would you like to start the <X> quest?" prompts that QuestHelper
  doesn't pre-highlight, so the script no longer cancels the dialogue
  by walking away.
- Add a 4-7s cooldown after a tracked dialogue ends before QuestScript
  re-clicks the NPC, to avoid interrupting scripted NPC animations or
  cutscenes that play out between dialogue exchanges.
…ed index

A game update shifted the settings toggle child indices, causing
disableWorldSwitcherConfirmation() to click the wrong toggle
(param0=35 was Farming protection, not World Switcher).

Replace the hardcoded switchToSettingsTab + param0(35) approach with
the existing openSettingsSearch("world switcher", "Toggle") pattern
(already used by disableLevelUpNotifications), making the method
resilient to future index shifts.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The old hideRoofs() used a hardcoded param0(4) index on the Display tab,
which is fragile to game updates shifting toggle positions.

Migrate to openSettingsSearch("roof", "Toggle") — the same search-based
approach used by disableWorldSwitcherConfirmation() — which is resilient
to future index shifts.

Also add HideRoofsEvent as a blocking event with a MicrobotConfig toggle
(defaults to enabled), so scripts automatically get roofs hidden before
running, consistent with how world switcher confirmation is handled.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Adds compile-and-sideload support to the agent server, allowing scripts
to be written and deployed during runtime without restarting the client.

New endpoints:
  POST /scripts/deploy   - compile a source directory and sideload
  POST /scripts/reload   - recompile an existing deployment
  DELETE /scripts/deploy - undeploy a running script
  GET  /scripts/deploy   - list active deployments
  GET  /profiles         - list available Microbot profiles
  POST /profiles/switch  - switch active profile

New classes:
  DeployedScript          - tracks a compiled/loaded script instance
  DynamicScriptCompiler   - compiles .java source dirs against live classpath
  DynamicScriptManager    - manages deploy/reload/undeploy lifecycle
  DynamicScriptDeployHandler - HTTP handler wiring above together
  ProfileHandler          - exposes profile listing and switching

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Reduces boilerplate in StateMachineScript by clarifying the fluent
Transition API and updating the example script to idiomatic usage.

Adds CLAUDE.md and AGENTS.md in the statemachine package for authoring
guidance: when to use StateMachineScript, how to define states,
transitions, and guards.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Adds docs/AGENT_SCRIPT_TOOLS.md — a comprehensive reference for the
agent scripting workflow: every CLI command, HTTP endpoint, offline
client-thread lookup tool, and debugging walkthrough in one page.

Updates:
  - AGENTS.md: more concise, links to new AGENT_SCRIPT_TOOLS.md
  - docs/AGENT_SERVER.md: document /scripts/deploy + /profiles endpoints
  - docs/MICROBOT_CLI.md: document 'ct' (client-thread) subcommand
  - docs/_sidebar.md: add AGENT_SCRIPT_TOOLS link
  - microbot-cli: add 'ct' subcommand for offline client-thread checking

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… in CLAUDE.md

All sub-directory AGENTS.md files were either symlinks or copies of
their sibling CLAUDE.md. Replace with a single @AGENTS.md reference
at the top of each CLAUDE.md so there is only one AGENTS.md to maintain.

- microbot/AGENTS.md (copy of CLAUDE.md) → deleted; CLAUDE.md converted
  from symlink to real file with @AGENTS.md prepended
- statemachine/AGENTS.md (unique architecture notes) → merged into
  statemachine/CLAUDE.md; file deleted
- util/settings/AGENTS.md (symlink to CLAUDE.md) → deleted; @AGENTS.md
  prepended to settings/CLAUDE.md

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Adds 116 Map of Alacrity destination rows to seasonal_transports.tsv,
gated by VarbitID.LEAGUE_TYPE > 0 so they only appear on League worlds.
Covers 10 regions (Asgarnia, Desert, Fremennik, Kandarin, Karamja,
Kourend, Morytania, Tirannwn, Varlamore, Wilderness).

Reuses existing SEASONAL_TRANSPORT wiring + useSeasonalTransports
toggle -- no new Java code. Updates the toggle description to name
Map of Alacrity (Clue compass removed from description since the
relic no longer exists; existing Clue compass rows left intact as
dead edges, not our code to delete).
- TransportType.isTeleport() now treats SEASONAL_TRANSPORT as a
  teleport so null-origin MoA rows pass the dispatcher filter.
- Rs2Walker: handleSeasonalTransport() opens item 33233, finds the
  matching row in widget 187.3 by text/name/action (full region-name
  first, shortcut-name fallback), clicks. dumpMapOfAlacrityWidget()
  logs the first-page layout so we can confirm the real in-game
  label format. Dispatcher branch wired in handleTransports().
- seasonal_transports.tsv: header renamed Items -> Item IDs (parser
  expected the latter; was silently dropping the column). All 116
  MoA rows now require item 33233, so the pathfinder uses them only
  when the relic is on you. Legacy Clue compass "30363=1" values
  normalized to plain "30363" to keep the parser happy.
- PathfinderConfig: loud [MoA] INFO logging on refresh + per-row
  rejection reasons (feature flag, varbit, missing items).

Not yet validated in-game — base is 171 commits behind upstream,
rebase pending.
fix(questhelper): auto-accept quest-start prompts and pause re-interaction after dialogue
feat(webwalker): add configurable per-card hotkeys
The file has been 0 bytes in tree for some time; it contributes nothing
to transport loading. Deleting lets follow-up work backport the upstream
POH teleport rows into the correct data files without tripping over the
stale empty sibling.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
WILDERNESS_UNDERGROUND_LEVEL_20 and _LEVEL_30 were 198 tiles too narrow
on the x-axis, so the pathfinder treated the eastern sliver of the
wilderness underground as non-wilderness. Widen both to match
WILDERNESS_UNDERGROUND and shorten the height to the correct per-level
y-extent.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Subscribe to GameStateChanged(LOGGED_IN) and rebuild the transport
availability cache on the next game tick, once varbits, quest states,
inventory, and bank containers are hydrated. Without this, the cache
carried pre-login state across world-hops and re-logins, so transports
gated by freshly-changed quest progress or inventory would stay disabled
until the next manual refresh.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replace the walking-subgraph BFS deque with a priority queue keyed on
f = g + admissible Chebyshev heuristic to the nearest target. Transports
stay in a separate g-cost PQ so the existing "try cheap transports first"
selection behaviour is preserved. Heuristic takes min(direct, mod-6400)
so surface↔underground targets (Varrock sewers, etc.) aren't mis-ranked
by the +6400 underground Y-offset convention.

Add PathSmoother: after BFS completes, collapse straight runs of adjacent
tiles by line-of-sight tracing with CollisionMap#canStep (mirrors the
traversability invariants of getNeighbors, so it won't skip across
transport origins or through doors). Exposed to consumers as
Pathfinder#getWalkablePath; raw path is still available during search.

Also switch Node#getPath{,Packed} from LinkedList+add(0,...) to
ArrayList+reverse to cut path-materialization allocations.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… doors, transports

Broad Tier-3 hardening of Rs2Walker covering robustness, observability,
and a few long-standing failure modes.

Concurrency: serialize the stateful entry points (walkWithState,
walkWithBankedTransportsAndState) through a reentrant walkerLock so
concurrent scripts no longer corrupt shared stuckCount / lastPosition /
currentTarget / nextWalkingDistance. setTarget and recalculatePath stay
unlocked as the cross-thread cancel path; currentTarget remains volatile.

Telemetry: add Rs2Walker.Telemetry exposing offPathRecalcCount /
stallRecalcCount / partialRetryCount / unreachableCount / lastReason
counters for probe scripts, and wire every recalc, partial-retry, and
UNREACHABLE exit into it. UNREACHABLE logs now include pathfinder stats
and endpoint-to-target distance for diagnosis.

Stall recovery: replace the fixed 10s stall threshold with
stallThresholdMs() which scales by combat (2.0x), animation (1.5x), and
interaction (1.5x) so legitimate activity doesn't trigger spurious
recalcs. Sidestep recovery now ranks reachable tiles by Chebyshev
distance toward the target and samples from the top 3 so retries bias
toward progress without locking onto the same blocked tile.

Minimap throughput: scan forward to the furthest path tile still on the
minimap and on the same plane (skipping transport origins) and click
that instead of the first-past-threshold tile. Advance the outer loop
index past intermediate tiles so downstream door/rockfall/transport
handlers don't re-run on positions already behind the player.

Run-energy: toggle run when energy permits and drink a stamina/energy
restore on long walks (>=20 tiles remaining) when energy drops below 30
and no stamina buff is active — gated to once every 10s and wrapped in
a try/catch so stamina management never breaks the walk.

Doors: skip door probes when the next step crosses a plane (always a
transport, probing would emit wrong-plane corner coords). On interact
failure with a quest/stat-lock dialogue, blacklist the tile in a
session-local set, refresh the pathfinder config, and recalculate.

Transports: infer climb-down closed variants (trapdoor/manhole/grate/
hatch) from ObjectComposition actions instead of the hardcoded
OPEN_TO_CLOSED_MAPPINGS, so new variants work without code changes. If
the matched object exposes "Open" but not the transport action, open it
first, re-find the now-open object, then hand it to handleObject.

POH instance safety: null-check WorldPoint.fromLocalInstance in
setTarget and fall back to raw world location with a warning; document
why handleDoors sees null conversions inside POH and log path context
so unexpected cases outside POH can be diagnosed.

Baseline: regenerate client-thread-guardrail-baseline.txt for renamed
lambda indices and the new ObjectComposition#getName() /
walkWithBankedTransportsAndStateLocked entries.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ker unit tests

PathfinderBenchmarkTest: fixed-corpus offline benchmark that prints
nodesChecked / elapsedMs / pathLength / endpoint-distance for each
route and asserts loose correctness bounds, so optimization changes
can be compared pre/post and regressions show up as failures.

ShortestPathTier1RegressionTest: pins invariants for Tier 1 webwalker
bugs — PrimitiveIntHashMap rehash data loss (#1), growBucket overflow
(#4), wilderness underground L20/L30 bounds (#2), post-login refresh
(#5), and the orphan teleportation_poh.tsv being gone (#3).

Rs2WalkerUnitTest: unit coverage for the pure helpers extracted during
Tier-3 hardening — sidestep-tile ranking toward target (#15), minimap
forward-scan clickable-index finder (#21), quest-lock dialogue keyword
heuristic (#19), and the UNREACHABLE telemetry counters (#22).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Consolidated findings from a four-angle audit (pathfinder algorithm,
Rs2Walker robustness, transport data completeness, concurrency/
observability). Sibling to UPSTREAM_COMPARISON.md — this plan tracks
work beyond known upstream gaps. Status-keyed so landed work (DONE) is
distinguished from partial progress (PARTIAL) and follow-up items
(OPEN), with file:line references back to the code.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
addComboRunes used Map.replaceAll, which only visits existing keys, so
carrying only combo runes (dust/mist/mud/lava/steam/smoke) never credited
the air/earth/water/fire requirements — teleports were skipped unless
base runes were already in inventory/pouch. Walk each available rune,
add its baseRunes quantities to the map so requirement diffs resolve.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Walker handler for MoA widget interaction:
- Two-step widget flow (region picker → destination picker, widget 187.3)
- Thread-safe widget access via runOnClientThreadOptional
- Detects <str>...</str> strikethrough for locked regions/destinations
- Session blacklist for failed destinations to break pathfinder retry loops

PathfinderConfig + CollisionMap:
- [MoA] tracing logs (refreshTransports kept/seen, getNeighbors,
  useTransport rejection reasons) to debug pathfinder selection
- TransportType.SEASONAL_TRANSPORT gets isTeleport()=true so null-origin
  rows pass the teleport dispatcher filter

seasonal_transports.tsv:
- Display names aligned 1:1 with the in-game widget text (regions use
  full Leagues labels like "Kharidian Desert"; destinations use exact
  casing/punctuation per widget dump)
- Added 7 missing Kandarin rows: Barbarian outpost: Basalt causeway,
  Catherby: Water obelisk grapple, and all 5 additional Yanille
  destinations (Wall climb + 4 dungeon variants)
- Coord corrections (validated via AgilityShortcut enum and
  agility_shortcuts.tsv origin rows; MoA lands at the less-favorable
  / start side of each shortcut):
    Kandarin Coal trucks: Log balance
    Asgarnia Dwarf Mine Crevice
    Asgarnia Falador Crumbling Wall
    Asgarnia God Wars Dungeon Rocky Handholds
    Asgarnia Taverley Wall Climb
    Asgarnia Taverley Dungeon Loose Railing / Blue Dragon Pipe / Floor Trap
    Fremennik Slayer Dungeon Traps
- Wilderness level bumped to 60 on MoA rows (no in-game wildy cap)
- Header "Items" renamed to "Item IDs" to match the parser's field key
christoabrown and others added 25 commits April 19, 2026 18:42
Forward InventoryID.HUNTSMANS_KIT container events to Rs2HuntKit, add HuntKit util + docs.

Made-with: Cursor
checkInv short-circuits must use the same name semantics as
withdraw*; quantity checks keep stackable vs slot count correct.
Remove client-thread branching for Deposit-X/Withdraw-X and document client-thread sleepUntil behavior. Regenerate client-thread guardrail baseline.
Fix(Transports.tsv): Added Kourend Library double doors to the walker's transports.tsv
feat(huntkit): wire kit cache + add helpers
# Conflicts:
#	gradle.properties
#	runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayUtil.java
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 8, 2026

Important

Review skipped

Too many files!

This PR contains 158 files, which is 8 over the limit of 150.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 38539f9c-3d52-44b7-a04f-cde3f65968ab

📥 Commits

Reviewing files that changed from the base of the PR and between 3040da5 and a7ca8a3.

⛔ Files ignored due to path filters (4)
  • runelite-client/src/main/resources/net/runelite/client/plugins/microbot/shortestpath/agility_shortcuts.tsv is excluded by !**/*.tsv
  • runelite-client/src/main/resources/net/runelite/client/plugins/microbot/shortestpath/seasonal_transports.tsv is excluded by !**/*.tsv
  • runelite-client/src/main/resources/net/runelite/client/plugins/microbot/shortestpath/teleportation_poh.tsv is excluded by !**/*.tsv
  • runelite-client/src/main/resources/net/runelite/client/plugins/microbot/shortestpath/transports.tsv is excluded by !**/*.tsv
📒 Files selected for processing (158)
  • .claude/skills/debug/SKILL.md
  • AGENTS.md
  • cache/src/main/java/net/runelite/cache/definitions/ItemDefinition.java
  • cache/src/main/java/net/runelite/cache/definitions/loaders/ItemLoader.java
  • docs/AGENT_SCRIPT_TOOLS.md
  • docs/AGENT_SERVER.md
  • docs/DETECTION_HARDENING.md
  • docs/MICROBOT_CLI.md
  • docs/_sidebar.md
  • docs/api/Rs2HuntKit.md
  • gradle.properties
  • microbot-cli
  • runelite-api/src/main/java/net/runelite/api/ActorSpotAnim.java
  • runelite-api/src/main/java/net/runelite/api/AmbientSoundEffect.java
  • runelite-api/src/main/java/net/runelite/api/Client.java
  • runelite-api/src/main/java/net/runelite/api/ItemComposition.java
  • runelite-api/src/main/java/net/runelite/api/Perspective.java
  • runelite-api/src/main/java/net/runelite/api/WorldView.java
  • runelite-client/build.gradle.kts
  • runelite-client/src/main/java/net/runelite/client/RuneLite.java
  • runelite-client/src/main/java/net/runelite/client/RuneLiteDebug.java
  • runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/HotColdClue.java
  • runelite-client/src/main/java/net/runelite/client/plugins/gpu/FacePrioritySorter.java
  • runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeSearchPanel.java
  • runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/AGENTS.md
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/BlockingEventManager.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/CLAUDE.md
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/CLAUDE.md
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/Microbot.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/MicrobotConfig.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/MicrobotPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/MicrobotVersionChecker.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/RandomFactClient.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/Script.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/accountselector/AutoLoginScript.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/agentserver/AgentServerConfig.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/agentserver/AgentServerPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/agentserver/handler/AgentHandler.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/agentserver/handler/DynamicScriptDeployHandler.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/agentserver/handler/ProfileHandler.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/agentserver/handler/StateMachineDebugHandler.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/agentserver/handler/VarpHandler.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/agentserver/scripting/DeployedScript.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/agentserver/scripting/DynamicScriptCompiler.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/agentserver/scripting/DynamicScriptManager.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/agentserver/uds/UdsHttp1Parser.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/agentserver/uds/UdsHttpExchange.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/agentserver/uds/UdsHttpServer.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/api/AbstractEntityQueryable.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/breakhandler/breakhandlerv2/BreakHandlerV2Script.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/example/ExampleScript.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/externalplugins/MicrobotPluginManager.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/externalplugins/PluginJarClassLoader.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/globval/GlobalConfiguration.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/moaaudit/MoaAuditPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/mouserecorder/MouseMacroRecorderPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/questhelper/QuestScript.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/ShortestPathConfig.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/ShortestPathPanel.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/ShortestPathPlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/TransportType.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/WEBWALKER_IMPROVEMENT_PLAN.md
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/CollisionMap.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/Node.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/PathSmoother.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/Pathfinder.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/shortestpath/pathfinder/PathfinderConfig.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/statemachine/AGENTS.md
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/statemachine/CLAUDE.md
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/statemachine/PendingTransition.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/statemachine/StateMachineScript.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/statemachine/StateSnapshot.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/statemachine/Transition.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/statemachineexample/StateMachineExampleConfig.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/statemachineexample/StateMachineExamplePlugin.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/statemachineexample/StateMachineExampleScript.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/ui/MicrobotHotkeyButton.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/ui/MicrobotTopLevelConfigPanel.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/Global.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/antiban/FieldUtil.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/antiban/Rs2AntibanSettings.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/antiban/SessionFatigue.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/antiban/enums/PlayStyle.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/camera/Rs2Camera.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/dialogues/Rs2Dialogue.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/events/HideRoofsEvent.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/grandexchange/Rs2GrandExchange.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/huntkit/Rs2HuntKit.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/inventory/Rs2Inventory.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/keyboard/Rs2Keyboard.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/magic/Rs2Magic.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/math/Rs2Random.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/misc/Rs2UiHelper.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/mouse/BotEventGuard.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/mouse/VirtualMouse.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/reflection/MenuActionAsmResolver.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/reflection/MenuActionInfoCache.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/reflection/MenuActionResourceSeeder.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/reflection/Rs2Reflection.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/settings/AGENTS.md
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/settings/AGENTS.md
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/settings/CLAUDE.md
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/settings/Rs2Settings.java
  • runelite-client/src/main/java/net/runelite/client/plugins/microbot/util/walker/Rs2Walker.java
  • runelite-client/src/main/java/net/runelite/client/plugins/stretchedmode/TranslateMouseListener.java
  • runelite-client/src/main/java/net/runelite/client/plugins/stretchedmode/TranslateMouseWheelListener.java
  • runelite-client/src/main/java/net/runelite/client/plugins/xtea/XteaClient.java
  • runelite-client/src/main/java/net/runelite/client/plugins/xtea/XteaPlugin.java
  • runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java
  • runelite-client/src/main/java/net/runelite/client/ui/SplashScreen.java
  • runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayBounds.java
  • runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java
  • runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayUtil.java
  • runelite-client/src/main/java/net/runelite/client/ui/overlay/SnapCorner.java
  • runelite-client/src/main/java/net/runelite/client/ui/overlay/SnapCorners.java
  • runelite-client/src/main/java/net/runelite/client/ui/overlay/components/ButtonComponent.java
  • runelite-client/src/main/resources/net/runelite/client/plugins/microbot/util/reflection/menu-action-info.properties
  • runelite-client/src/main/resources/net/runelite/client/runelite.properties
  • runelite-client/src/test/java/net/runelite/client/plugins/cluescrolls/clues/HotColdClueTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/accountselector/AutoLoginBackoffTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/agentserver/AgentServerPluginTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/agentserver/handler/AgentHandlerAuthOpacityTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/agentserver/handler/LoginHandlerTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/agentserver/handler/ScreenshotHandlerTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/agentserver/handler/ScriptHandlerTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/agentserver/handler/VarpHandlerTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/agentserver/uds/UdsHttpServerTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/agentserver/uds/UdsParentDirLockdownTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/api/AbstractEntityQueryableInterruptionTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/PathSmootherTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/PathfinderBenchmarkTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/ShortestPathCoreTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/shortestpath/ShortestPathTier1RegressionTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/GlobalPollIntervalTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/antiban/SessionFatigueTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/antiban/SessionFatigueWiringTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/antiban/UnsafeUsageGuardTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/antiban/enums/PlayStyleOrnsteinUhlenbeckTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/camera/Rs2CameraSmoothingTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/keyboard/Rs2KeyboardTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/math/Rs2RandomLogNormalBoundedTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/math/Rs2RandomReactionTimeTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/misc/Rs2UiHelperClickForceTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/misc/Rs2UiHelperClickPointJitterTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/mouse/MouseSourceTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/mouse/VirtualMouseUngatedMotionTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/reflection/MenuActionInfoCacheTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/reflection/Rs2ReflectionAsmIsolationTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/Rs2WalkerStaminaTest.java
  • runelite-client/src/test/java/net/runelite/client/plugins/microbot/util/walker/Rs2WalkerUnitTest.java
  • runelite-client/src/test/resources/threadsafety/client-thread-guardrail-baseline.txt
  • scripts/test_hot_reload.py

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@chsami chsami changed the title [codex] Merge development into main for 1.12.26.2 / Microbot 2.5.5 Merge development into main for 1.12.26.2 / Microbot 2.5.5 May 8, 2026
@chsami chsami marked this pull request as ready for review May 8, 2026 17:50
@chsami chsami merged commit af640e3 into main May 8, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants