feat(recovery): death handler + auto-defend reflex + bulk-collect rework + mc_stay shim

Four targeted fixes for issues observed during the live autonomous test:

1. **bot.modes shim** (extensions/lib/mcdata.js)
   Mindcraft skills.* call bot.modes.pause('cowardice') in 7+ places.
   `mineflayer-modes` does not exist on npm — it's internal to Mindcraft.
   attachPluginsAndInit now installs a no-op shim so skills.stay() /
   .consume() / .defendSelf() etc. stop crashing with "pause undefined".

2. **Death + respawn handlers** (extensions/mineflayer-bridge.ts)
   Subscribe to bot 'death' event: append diary line with position,
   clear current-task.json so Pi doesn't resume a stale task referencing
   inventory that no longer exists.
   On 'spawn' within 5s of death: log the new respawn position to diary.
   Live test had bot killed twice by zombies at night; the next Pi
   prompt was unable to recover. With this it's now an explicit diary
   line + clean task slate.

3. **Auto-defend reflex tick** (extensions/mineflayer-bridge.ts)
   New setInterval(2s) that, when bot.health < 18 AND a hostile mob
   (zombie/skeleton/creeper/spider/etc.) is within 6 blocks AND no
   active world task, fires `bot.pvp.attack(nearest)` in the background.
   No LLM call needed for instant self-defense — saves tokens and reacts
   on mineflayer timescale (sub-second) rather than Pi loop timescale
   (~10s+ to reason and dispatch). Throttled to once per 4s.

4. **mc_collect_block bulk rework** (extensions/mindcraft-skills.ts)
   Live test showed count=1 succeeds in ~25s but count=8 hangs past
   270s with identical blocks in range. Upstream collectBlock plugin
   appears to drift on its block cache after the first dig in dense
   terrain. Loop single-block collects in-tool instead (75s per iter,
   re-pathfind on each iteration). Track per-iter success/failure,
   abort after 3 consecutive failures, return aggregate count to the
   agent so it can adapt instead of seeing a single failure.

Smoke test: both extensions load, bot connects, perception confirms
hostiles nearby and daylight safety check. No syntax/runtime errors.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-25 15:06:37 +03:00
co-authored by Claude Opus 4.7
parent a323bdea85
commit 68f59dfa4c
3 changed files with 128 additions and 7 deletions
+14
View File
@@ -148,6 +148,20 @@ export function attachPluginsAndInit(bot) {
bot.loadPlugin(pvp);
bot.loadPlugin(collectblock);
bot.loadPlugin(armorManager);
// Shim bot.modes — Mindcraft's skills.* call bot.modes.pause('cowardice')
// etc., but `mineflayer-modes` doesn't exist on npm (it's internal to
// Mindcraft). Stub the API so skills.stay()/.consume()/.defendSelf() etc.
// don't crash with "pause undefined".
if (!bot.modes) {
bot.modes = {
pause: () => {},
unpause: () => {},
isOn: () => false,
getMiningCooldown: () => 0,
};
}
bot.once('login', () => {
mc_version = bot.version;
mcdata = minecraftData(mc_version);