arcane-agents 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +528 -0
- package/assets/characters/README.md +114 -0
- package/assets/characters/assassin-shadow/animations/walk/east/0.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/east/1.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/east/2.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/east/3.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/east/4.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/east/5.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/east/6.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/east/7.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/north/0.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/north/1.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/north/2.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/north/3.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/north/4.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/north/5.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/north/6.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/north/7.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/south/0.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/south/1.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/south/2.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/south/3.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/south/4.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/south/5.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/south/6.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/south/7.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/west/0.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/west/1.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/west/2.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/west/3.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/west/4.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/west/5.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/west/6.png +0 -0
- package/assets/characters/assassin-shadow/animations/walk/west/7.png +0 -0
- package/assets/characters/assassin-shadow/animations/working/0.png +0 -0
- package/assets/characters/assassin-shadow/animations/working/1.png +0 -0
- package/assets/characters/assassin-shadow/animations/working/10.png +0 -0
- package/assets/characters/assassin-shadow/animations/working/11.png +0 -0
- package/assets/characters/assassin-shadow/animations/working/12.png +0 -0
- package/assets/characters/assassin-shadow/animations/working/13.png +0 -0
- package/assets/characters/assassin-shadow/animations/working/14.png +0 -0
- package/assets/characters/assassin-shadow/animations/working/15.png +0 -0
- package/assets/characters/assassin-shadow/animations/working/2.png +0 -0
- package/assets/characters/assassin-shadow/animations/working/3.png +0 -0
- package/assets/characters/assassin-shadow/animations/working/4.png +0 -0
- package/assets/characters/assassin-shadow/animations/working/5.png +0 -0
- package/assets/characters/assassin-shadow/animations/working/6.png +0 -0
- package/assets/characters/assassin-shadow/animations/working/7.png +0 -0
- package/assets/characters/assassin-shadow/animations/working/8.png +0 -0
- package/assets/characters/assassin-shadow/animations/working/9.png +0 -0
- package/assets/characters/assassin-shadow/rotations/east.png +0 -0
- package/assets/characters/assassin-shadow/rotations/north.png +0 -0
- package/assets/characters/assassin-shadow/rotations/south.png +0 -0
- package/assets/characters/assassin-shadow/rotations/west.png +0 -0
- package/assets/characters/assassin-shadow/voice-lines/arrive.mp3 +0 -0
- package/assets/characters/assassin-shadow/voice-lines/attention.mp3 +0 -0
- package/assets/characters/assassin-shadow/voice-lines/complete.mp3 +0 -0
- package/assets/characters/assassin-shadow/voice-lines/death.mp3 +0 -0
- package/assets/characters/assassin-shadow/voice-lines/move_variant_1.mp3 +0 -0
- package/assets/characters/assassin-shadow/voice-lines/move_variant_2.mp3 +0 -0
- package/assets/characters/assassin-shadow/voice-lines/move_variant_3.mp3 +0 -0
- package/assets/characters/assassin-shadow/voice-lines/selected_variant_1.mp3 +0 -0
- package/assets/characters/assassin-shadow/voice-lines/selected_variant_2.mp3 +0 -0
- package/assets/characters/assassin-shadow/voice-lines/selected_variant_3.mp3 +0 -0
- package/assets/characters/barbarian-wild/animations/walk/east/0.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/east/1.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/east/2.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/east/3.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/east/4.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/east/5.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/east/6.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/east/7.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/north/0.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/north/1.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/north/2.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/north/3.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/north/4.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/north/5.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/north/6.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/north/7.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/south/0.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/south/1.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/south/2.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/south/3.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/south/4.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/south/5.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/south/6.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/south/7.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/west/0.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/west/1.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/west/2.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/west/3.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/west/4.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/west/5.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/west/6.png +0 -0
- package/assets/characters/barbarian-wild/animations/walk/west/7.png +0 -0
- package/assets/characters/barbarian-wild/animations/working/0.png +0 -0
- package/assets/characters/barbarian-wild/animations/working/1.png +0 -0
- package/assets/characters/barbarian-wild/animations/working/10.png +0 -0
- package/assets/characters/barbarian-wild/animations/working/11.png +0 -0
- package/assets/characters/barbarian-wild/animations/working/12.png +0 -0
- package/assets/characters/barbarian-wild/animations/working/13.png +0 -0
- package/assets/characters/barbarian-wild/animations/working/14.png +0 -0
- package/assets/characters/barbarian-wild/animations/working/15.png +0 -0
- package/assets/characters/barbarian-wild/animations/working/2.png +0 -0
- package/assets/characters/barbarian-wild/animations/working/3.png +0 -0
- package/assets/characters/barbarian-wild/animations/working/4.png +0 -0
- package/assets/characters/barbarian-wild/animations/working/5.png +0 -0
- package/assets/characters/barbarian-wild/animations/working/6.png +0 -0
- package/assets/characters/barbarian-wild/animations/working/7.png +0 -0
- package/assets/characters/barbarian-wild/animations/working/8.png +0 -0
- package/assets/characters/barbarian-wild/animations/working/9.png +0 -0
- package/assets/characters/barbarian-wild/rotations/east.png +0 -0
- package/assets/characters/barbarian-wild/rotations/north.png +0 -0
- package/assets/characters/barbarian-wild/rotations/south.png +0 -0
- package/assets/characters/barbarian-wild/rotations/west.png +0 -0
- package/assets/characters/barbarian-wild/voice-lines/arrive.mp3 +0 -0
- package/assets/characters/barbarian-wild/voice-lines/attention.mp3 +0 -0
- package/assets/characters/barbarian-wild/voice-lines/complete.mp3 +0 -0
- package/assets/characters/barbarian-wild/voice-lines/death.mp3 +0 -0
- package/assets/characters/barbarian-wild/voice-lines/move_variant_1.mp3 +0 -0
- package/assets/characters/barbarian-wild/voice-lines/move_variant_2.mp3 +0 -0
- package/assets/characters/barbarian-wild/voice-lines/move_variant_3.mp3 +0 -0
- package/assets/characters/barbarian-wild/voice-lines/selected_variant_1.mp3 +0 -0
- package/assets/characters/barbarian-wild/voice-lines/selected_variant_2.mp3 +0 -0
- package/assets/characters/barbarian-wild/voice-lines/selected_variant_3.mp3 +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/east/0.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/east/1.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/east/2.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/east/3.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/east/4.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/east/5.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/east/6.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/east/7.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/north/0.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/north/1.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/north/2.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/north/3.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/north/4.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/north/5.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/north/6.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/north/7.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/south/0.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/south/1.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/south/2.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/south/3.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/south/4.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/south/5.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/south/6.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/south/7.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/west/0.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/west/1.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/west/2.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/west/3.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/west/4.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/west/5.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/west/6.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/walk/west/7.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/working/0.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/working/1.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/working/10.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/working/11.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/working/12.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/working/13.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/working/14.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/working/15.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/working/2.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/working/3.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/working/4.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/working/5.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/working/6.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/working/7.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/working/8.png +0 -0
- package/assets/characters/blood-elf-spellarcher/animations/working/9.png +0 -0
- package/assets/characters/blood-elf-spellarcher/rotations/east.png +0 -0
- package/assets/characters/blood-elf-spellarcher/rotations/north.png +0 -0
- package/assets/characters/blood-elf-spellarcher/rotations/south.png +0 -0
- package/assets/characters/blood-elf-spellarcher/rotations/west.png +0 -0
- package/assets/characters/blood-elf-spellarcher/voice-lines/arrive.mp3 +0 -0
- package/assets/characters/blood-elf-spellarcher/voice-lines/attention.mp3 +0 -0
- package/assets/characters/blood-elf-spellarcher/voice-lines/complete.mp3 +0 -0
- package/assets/characters/blood-elf-spellarcher/voice-lines/death.mp3 +0 -0
- package/assets/characters/blood-elf-spellarcher/voice-lines/move_variant_1.mp3 +0 -0
- package/assets/characters/blood-elf-spellarcher/voice-lines/move_variant_2.mp3 +0 -0
- package/assets/characters/blood-elf-spellarcher/voice-lines/move_variant_3.mp3 +0 -0
- package/assets/characters/blood-elf-spellarcher/voice-lines/selected_variant_1.mp3 +0 -0
- package/assets/characters/blood-elf-spellarcher/voice-lines/selected_variant_2.mp3 +0 -0
- package/assets/characters/blood-elf-spellarcher/voice-lines/selected_variant_3.mp3 +0 -0
- package/assets/characters/chronomancer/animations/walk/east/0.png +0 -0
- package/assets/characters/chronomancer/animations/walk/east/1.png +0 -0
- package/assets/characters/chronomancer/animations/walk/east/2.png +0 -0
- package/assets/characters/chronomancer/animations/walk/east/3.png +0 -0
- package/assets/characters/chronomancer/animations/walk/east/4.png +0 -0
- package/assets/characters/chronomancer/animations/walk/east/5.png +0 -0
- package/assets/characters/chronomancer/animations/walk/east/6.png +0 -0
- package/assets/characters/chronomancer/animations/walk/east/7.png +0 -0
- package/assets/characters/chronomancer/animations/walk/north/0.png +0 -0
- package/assets/characters/chronomancer/animations/walk/north/1.png +0 -0
- package/assets/characters/chronomancer/animations/walk/north/2.png +0 -0
- package/assets/characters/chronomancer/animations/walk/north/3.png +0 -0
- package/assets/characters/chronomancer/animations/walk/north/4.png +0 -0
- package/assets/characters/chronomancer/animations/walk/north/5.png +0 -0
- package/assets/characters/chronomancer/animations/walk/north/6.png +0 -0
- package/assets/characters/chronomancer/animations/walk/north/7.png +0 -0
- package/assets/characters/chronomancer/animations/walk/south/0.png +0 -0
- package/assets/characters/chronomancer/animations/walk/south/1.png +0 -0
- package/assets/characters/chronomancer/animations/walk/south/2.png +0 -0
- package/assets/characters/chronomancer/animations/walk/south/3.png +0 -0
- package/assets/characters/chronomancer/animations/walk/south/4.png +0 -0
- package/assets/characters/chronomancer/animations/walk/south/5.png +0 -0
- package/assets/characters/chronomancer/animations/walk/south/6.png +0 -0
- package/assets/characters/chronomancer/animations/walk/south/7.png +0 -0
- package/assets/characters/chronomancer/animations/walk/west/0.png +0 -0
- package/assets/characters/chronomancer/animations/walk/west/1.png +0 -0
- package/assets/characters/chronomancer/animations/walk/west/2.png +0 -0
- package/assets/characters/chronomancer/animations/walk/west/3.png +0 -0
- package/assets/characters/chronomancer/animations/walk/west/4.png +0 -0
- package/assets/characters/chronomancer/animations/walk/west/5.png +0 -0
- package/assets/characters/chronomancer/animations/walk/west/6.png +0 -0
- package/assets/characters/chronomancer/animations/walk/west/7.png +0 -0
- package/assets/characters/chronomancer/animations/working/0.png +0 -0
- package/assets/characters/chronomancer/animations/working/1.png +0 -0
- package/assets/characters/chronomancer/animations/working/10.png +0 -0
- package/assets/characters/chronomancer/animations/working/11.png +0 -0
- package/assets/characters/chronomancer/animations/working/12.png +0 -0
- package/assets/characters/chronomancer/animations/working/13.png +0 -0
- package/assets/characters/chronomancer/animations/working/14.png +0 -0
- package/assets/characters/chronomancer/animations/working/15.png +0 -0
- package/assets/characters/chronomancer/animations/working/2.png +0 -0
- package/assets/characters/chronomancer/animations/working/3.png +0 -0
- package/assets/characters/chronomancer/animations/working/4.png +0 -0
- package/assets/characters/chronomancer/animations/working/5.png +0 -0
- package/assets/characters/chronomancer/animations/working/6.png +0 -0
- package/assets/characters/chronomancer/animations/working/7.png +0 -0
- package/assets/characters/chronomancer/animations/working/8.png +0 -0
- package/assets/characters/chronomancer/animations/working/9.png +0 -0
- package/assets/characters/chronomancer/rotations/east.png +0 -0
- package/assets/characters/chronomancer/rotations/north.png +0 -0
- package/assets/characters/chronomancer/rotations/south.png +0 -0
- package/assets/characters/chronomancer/rotations/west.png +0 -0
- package/assets/characters/chronomancer/voice-lines/arrive.mp3 +0 -0
- package/assets/characters/chronomancer/voice-lines/attention.mp3 +0 -0
- package/assets/characters/chronomancer/voice-lines/complete.mp3 +0 -0
- package/assets/characters/chronomancer/voice-lines/death.mp3 +0 -0
- package/assets/characters/chronomancer/voice-lines/move_variant_1.mp3 +0 -0
- package/assets/characters/chronomancer/voice-lines/move_variant_2.mp3 +0 -0
- package/assets/characters/chronomancer/voice-lines/move_variant_3.mp3 +0 -0
- package/assets/characters/chronomancer/voice-lines/selected_variant_1.mp3 +0 -0
- package/assets/characters/chronomancer/voice-lines/selected_variant_2.mp3 +0 -0
- package/assets/characters/chronomancer/voice-lines/selected_variant_3.mp3 +0 -0
- package/assets/characters/crystal-mage/animations/walk/east/0.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/east/1.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/east/2.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/east/3.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/east/4.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/east/5.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/east/6.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/east/7.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/north/0.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/north/1.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/north/2.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/north/3.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/north/4.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/north/5.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/north/6.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/north/7.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/south/0.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/south/1.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/south/2.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/south/3.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/south/4.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/south/5.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/south/6.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/south/7.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/west/0.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/west/1.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/west/2.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/west/3.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/west/4.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/west/5.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/west/6.png +0 -0
- package/assets/characters/crystal-mage/animations/walk/west/7.png +0 -0
- package/assets/characters/crystal-mage/animations/working/0.png +0 -0
- package/assets/characters/crystal-mage/animations/working/1.png +0 -0
- package/assets/characters/crystal-mage/animations/working/10.png +0 -0
- package/assets/characters/crystal-mage/animations/working/11.png +0 -0
- package/assets/characters/crystal-mage/animations/working/12.png +0 -0
- package/assets/characters/crystal-mage/animations/working/13.png +0 -0
- package/assets/characters/crystal-mage/animations/working/14.png +0 -0
- package/assets/characters/crystal-mage/animations/working/15.png +0 -0
- package/assets/characters/crystal-mage/animations/working/2.png +0 -0
- package/assets/characters/crystal-mage/animations/working/3.png +0 -0
- package/assets/characters/crystal-mage/animations/working/4.png +0 -0
- package/assets/characters/crystal-mage/animations/working/5.png +0 -0
- package/assets/characters/crystal-mage/animations/working/6.png +0 -0
- package/assets/characters/crystal-mage/animations/working/7.png +0 -0
- package/assets/characters/crystal-mage/animations/working/8.png +0 -0
- package/assets/characters/crystal-mage/animations/working/9.png +0 -0
- package/assets/characters/crystal-mage/rotations/east.png +0 -0
- package/assets/characters/crystal-mage/rotations/north.png +0 -0
- package/assets/characters/crystal-mage/rotations/south.png +0 -0
- package/assets/characters/crystal-mage/rotations/west.png +0 -0
- package/assets/characters/crystal-mage/voice-lines/arrive.mp3 +0 -0
- package/assets/characters/crystal-mage/voice-lines/attention.mp3 +0 -0
- package/assets/characters/crystal-mage/voice-lines/complete.mp3 +0 -0
- package/assets/characters/crystal-mage/voice-lines/death.mp3 +0 -0
- package/assets/characters/crystal-mage/voice-lines/move_variant_1.mp3 +0 -0
- package/assets/characters/crystal-mage/voice-lines/move_variant_2.mp3 +0 -0
- package/assets/characters/crystal-mage/voice-lines/move_variant_3.mp3 +0 -0
- package/assets/characters/crystal-mage/voice-lines/selected_variant_1.mp3 +0 -0
- package/assets/characters/crystal-mage/voice-lines/selected_variant_2.mp3 +0 -0
- package/assets/characters/crystal-mage/voice-lines/selected_variant_3.mp3 +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/east/0.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/east/1.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/east/2.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/east/3.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/east/4.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/east/5.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/east/6.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/east/7.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/north/0.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/north/1.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/north/2.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/north/3.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/north/4.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/north/5.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/north/6.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/north/7.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/south/0.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/south/1.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/south/2.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/south/3.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/south/4.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/south/5.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/south/6.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/south/7.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/west/0.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/west/1.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/west/2.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/west/3.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/west/4.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/west/5.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/west/6.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/walk/west/7.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/working/0.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/working/1.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/working/10.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/working/11.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/working/12.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/working/13.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/working/14.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/working/15.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/working/2.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/working/3.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/working/4.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/working/5.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/working/6.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/working/7.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/working/8.png +0 -0
- package/assets/characters/dwarf-warrior-short/animations/working/9.png +0 -0
- package/assets/characters/dwarf-warrior-short/rotations/east.png +0 -0
- package/assets/characters/dwarf-warrior-short/rotations/north.png +0 -0
- package/assets/characters/dwarf-warrior-short/rotations/south.png +0 -0
- package/assets/characters/dwarf-warrior-short/rotations/west.png +0 -0
- package/assets/characters/dwarf-warrior-short/voice-lines/arrive.mp3 +0 -0
- package/assets/characters/dwarf-warrior-short/voice-lines/attention.mp3 +0 -0
- package/assets/characters/dwarf-warrior-short/voice-lines/complete.mp3 +0 -0
- package/assets/characters/dwarf-warrior-short/voice-lines/death.mp3 +0 -0
- package/assets/characters/dwarf-warrior-short/voice-lines/move_variant_1.mp3 +0 -0
- package/assets/characters/dwarf-warrior-short/voice-lines/move_variant_2.mp3 +0 -0
- package/assets/characters/dwarf-warrior-short/voice-lines/move_variant_3.mp3 +0 -0
- package/assets/characters/dwarf-warrior-short/voice-lines/selected_variant_1.mp3 +0 -0
- package/assets/characters/dwarf-warrior-short/voice-lines/selected_variant_2.mp3 +0 -0
- package/assets/characters/dwarf-warrior-short/voice-lines/selected_variant_3.mp3 +0 -0
- package/assets/characters/elder-wizard/animations/walk/east/0.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/east/1.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/east/2.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/east/3.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/east/4.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/east/5.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/east/6.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/east/7.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/north/0.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/north/1.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/north/2.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/north/3.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/north/4.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/north/5.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/north/6.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/north/7.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/south/0.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/south/1.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/south/2.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/south/3.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/south/4.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/south/5.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/south/6.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/south/7.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/west/0.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/west/1.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/west/2.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/west/3.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/west/4.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/west/5.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/west/6.png +0 -0
- package/assets/characters/elder-wizard/animations/walk/west/7.png +0 -0
- package/assets/characters/elder-wizard/animations/working/0.png +0 -0
- package/assets/characters/elder-wizard/animations/working/1.png +0 -0
- package/assets/characters/elder-wizard/animations/working/10.png +0 -0
- package/assets/characters/elder-wizard/animations/working/11.png +0 -0
- package/assets/characters/elder-wizard/animations/working/12.png +0 -0
- package/assets/characters/elder-wizard/animations/working/13.png +0 -0
- package/assets/characters/elder-wizard/animations/working/14.png +0 -0
- package/assets/characters/elder-wizard/animations/working/15.png +0 -0
- package/assets/characters/elder-wizard/animations/working/2.png +0 -0
- package/assets/characters/elder-wizard/animations/working/3.png +0 -0
- package/assets/characters/elder-wizard/animations/working/4.png +0 -0
- package/assets/characters/elder-wizard/animations/working/5.png +0 -0
- package/assets/characters/elder-wizard/animations/working/6.png +0 -0
- package/assets/characters/elder-wizard/animations/working/7.png +0 -0
- package/assets/characters/elder-wizard/animations/working/8.png +0 -0
- package/assets/characters/elder-wizard/animations/working/9.png +0 -0
- package/assets/characters/elder-wizard/rotations/east.png +0 -0
- package/assets/characters/elder-wizard/rotations/north.png +0 -0
- package/assets/characters/elder-wizard/rotations/south.png +0 -0
- package/assets/characters/elder-wizard/rotations/west.png +0 -0
- package/assets/characters/elder-wizard/voice-lines/arrive.mp3 +0 -0
- package/assets/characters/elder-wizard/voice-lines/attention.mp3 +0 -0
- package/assets/characters/elder-wizard/voice-lines/complete.mp3 +0 -0
- package/assets/characters/elder-wizard/voice-lines/death.mp3 +0 -0
- package/assets/characters/elder-wizard/voice-lines/move_variant_1.mp3 +0 -0
- package/assets/characters/elder-wizard/voice-lines/move_variant_2.mp3 +0 -0
- package/assets/characters/elder-wizard/voice-lines/move_variant_3.mp3 +0 -0
- package/assets/characters/elder-wizard/voice-lines/selected_variant_1.mp3 +0 -0
- package/assets/characters/elder-wizard/voice-lines/selected_variant_2.mp3 +0 -0
- package/assets/characters/elder-wizard/voice-lines/selected_variant_3.mp3 +0 -0
- package/assets/characters/gothic-witch/animations/walk/east/0.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/east/1.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/east/2.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/east/3.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/east/4.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/east/5.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/east/6.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/east/7.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/north/0.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/north/1.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/north/2.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/north/3.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/north/4.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/north/5.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/north/6.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/north/7.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/south/0.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/south/1.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/south/2.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/south/3.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/south/4.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/south/5.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/south/6.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/south/7.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/west/0.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/west/1.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/west/2.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/west/3.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/west/4.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/west/5.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/west/6.png +0 -0
- package/assets/characters/gothic-witch/animations/walk/west/7.png +0 -0
- package/assets/characters/gothic-witch/animations/working/0.png +0 -0
- package/assets/characters/gothic-witch/animations/working/1.png +0 -0
- package/assets/characters/gothic-witch/animations/working/10.png +0 -0
- package/assets/characters/gothic-witch/animations/working/11.png +0 -0
- package/assets/characters/gothic-witch/animations/working/12.png +0 -0
- package/assets/characters/gothic-witch/animations/working/13.png +0 -0
- package/assets/characters/gothic-witch/animations/working/14.png +0 -0
- package/assets/characters/gothic-witch/animations/working/15.png +0 -0
- package/assets/characters/gothic-witch/animations/working/2.png +0 -0
- package/assets/characters/gothic-witch/animations/working/3.png +0 -0
- package/assets/characters/gothic-witch/animations/working/4.png +0 -0
- package/assets/characters/gothic-witch/animations/working/5.png +0 -0
- package/assets/characters/gothic-witch/animations/working/6.png +0 -0
- package/assets/characters/gothic-witch/animations/working/7.png +0 -0
- package/assets/characters/gothic-witch/animations/working/8.png +0 -0
- package/assets/characters/gothic-witch/animations/working/9.png +0 -0
- package/assets/characters/gothic-witch/rotations/east.png +0 -0
- package/assets/characters/gothic-witch/rotations/north.png +0 -0
- package/assets/characters/gothic-witch/rotations/south.png +0 -0
- package/assets/characters/gothic-witch/rotations/west.png +0 -0
- package/assets/characters/gothic-witch/voice-lines/arrive.mp3 +0 -0
- package/assets/characters/gothic-witch/voice-lines/attention.mp3 +0 -0
- package/assets/characters/gothic-witch/voice-lines/complete.mp3 +0 -0
- package/assets/characters/gothic-witch/voice-lines/death.mp3 +0 -0
- package/assets/characters/gothic-witch/voice-lines/move_variant_1.mp3 +0 -0
- package/assets/characters/gothic-witch/voice-lines/move_variant_2.mp3 +0 -0
- package/assets/characters/gothic-witch/voice-lines/move_variant_3.mp3 +0 -0
- package/assets/characters/gothic-witch/voice-lines/selected_variant_1.mp3 +0 -0
- package/assets/characters/gothic-witch/voice-lines/selected_variant_2.mp3 +0 -0
- package/assets/characters/gothic-witch/voice-lines/selected_variant_3.mp3 +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/east/0.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/east/1.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/east/2.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/east/3.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/east/4.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/east/5.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/east/6.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/east/7.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/north/0.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/north/1.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/north/2.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/north/3.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/north/4.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/north/5.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/north/6.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/north/7.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/south/0.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/south/1.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/south/2.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/south/3.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/south/4.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/south/5.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/south/6.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/south/7.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/west/0.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/west/1.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/west/2.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/west/3.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/west/4.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/west/5.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/west/6.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/walk/west/7.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/working/0.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/working/1.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/working/10.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/working/11.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/working/12.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/working/13.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/working/14.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/working/15.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/working/2.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/working/3.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/working/4.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/working/5.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/working/6.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/working/7.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/working/8.png +0 -0
- package/assets/characters/horned-helm-fighter/animations/working/9.png +0 -0
- package/assets/characters/horned-helm-fighter/rotations/east.png +0 -0
- package/assets/characters/horned-helm-fighter/rotations/north.png +0 -0
- package/assets/characters/horned-helm-fighter/rotations/south.png +0 -0
- package/assets/characters/horned-helm-fighter/rotations/west.png +0 -0
- package/assets/characters/horned-helm-fighter/voice-lines/arrive.mp3 +0 -0
- package/assets/characters/horned-helm-fighter/voice-lines/attention.mp3 +0 -0
- package/assets/characters/horned-helm-fighter/voice-lines/complete.mp3 +0 -0
- package/assets/characters/horned-helm-fighter/voice-lines/death.mp3 +0 -0
- package/assets/characters/horned-helm-fighter/voice-lines/move_variant_1.mp3 +0 -0
- package/assets/characters/horned-helm-fighter/voice-lines/move_variant_2.mp3 +0 -0
- package/assets/characters/horned-helm-fighter/voice-lines/move_variant_3.mp3 +0 -0
- package/assets/characters/horned-helm-fighter/voice-lines/selected_variant_1.mp3 +0 -0
- package/assets/characters/horned-helm-fighter/voice-lines/selected_variant_2.mp3 +0 -0
- package/assets/characters/horned-helm-fighter/voice-lines/selected_variant_3.mp3 +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/east/0.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/east/1.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/east/2.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/east/3.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/east/4.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/east/5.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/east/6.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/east/7.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/north/0.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/north/1.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/north/2.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/north/3.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/north/4.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/north/5.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/north/6.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/north/7.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/south/0.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/south/1.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/south/2.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/south/3.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/south/4.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/south/5.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/south/6.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/south/7.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/west/0.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/west/1.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/west/2.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/west/3.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/west/4.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/west/5.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/west/6.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/walk/west/7.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/working/0.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/working/1.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/working/10.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/working/11.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/working/12.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/working/13.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/working/14.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/working/15.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/working/2.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/working/3.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/working/4.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/working/5.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/working/6.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/working/7.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/working/8.png +0 -0
- package/assets/characters/knight-blue-guardian/animations/working/9.png +0 -0
- package/assets/characters/knight-blue-guardian/rotations/east.png +0 -0
- package/assets/characters/knight-blue-guardian/rotations/north.png +0 -0
- package/assets/characters/knight-blue-guardian/rotations/south.png +0 -0
- package/assets/characters/knight-blue-guardian/rotations/west.png +0 -0
- package/assets/characters/knight-blue-guardian/voice-lines/arrive.mp3 +0 -0
- package/assets/characters/knight-blue-guardian/voice-lines/attention.mp3 +0 -0
- package/assets/characters/knight-blue-guardian/voice-lines/complete.mp3 +0 -0
- package/assets/characters/knight-blue-guardian/voice-lines/death.mp3 +0 -0
- package/assets/characters/knight-blue-guardian/voice-lines/move_variant_1.mp3 +0 -0
- package/assets/characters/knight-blue-guardian/voice-lines/move_variant_2.mp3 +0 -0
- package/assets/characters/knight-blue-guardian/voice-lines/move_variant_3.mp3 +0 -0
- package/assets/characters/knight-blue-guardian/voice-lines/selected_variant_1.mp3 +0 -0
- package/assets/characters/knight-blue-guardian/voice-lines/selected_variant_2.mp3 +0 -0
- package/assets/characters/knight-blue-guardian/voice-lines/selected_variant_3.mp3 +0 -0
- package/assets/characters/launch-preview.html +298 -0
- package/assets/characters/minotaur-strategist/animations/walk/east/0.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/east/1.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/east/2.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/east/3.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/east/4.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/east/5.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/east/6.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/east/7.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/north/0.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/north/1.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/north/2.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/north/3.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/north/4.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/north/5.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/north/6.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/north/7.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/south/0.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/south/1.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/south/2.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/south/3.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/south/4.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/south/5.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/south/6.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/south/7.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/west/0.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/west/1.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/west/2.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/west/3.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/west/4.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/west/5.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/west/6.png +0 -0
- package/assets/characters/minotaur-strategist/animations/walk/west/7.png +0 -0
- package/assets/characters/minotaur-strategist/animations/working/0.png +0 -0
- package/assets/characters/minotaur-strategist/animations/working/1.png +0 -0
- package/assets/characters/minotaur-strategist/animations/working/10.png +0 -0
- package/assets/characters/minotaur-strategist/animations/working/11.png +0 -0
- package/assets/characters/minotaur-strategist/animations/working/12.png +0 -0
- package/assets/characters/minotaur-strategist/animations/working/13.png +0 -0
- package/assets/characters/minotaur-strategist/animations/working/14.png +0 -0
- package/assets/characters/minotaur-strategist/animations/working/15.png +0 -0
- package/assets/characters/minotaur-strategist/animations/working/2.png +0 -0
- package/assets/characters/minotaur-strategist/animations/working/3.png +0 -0
- package/assets/characters/minotaur-strategist/animations/working/4.png +0 -0
- package/assets/characters/minotaur-strategist/animations/working/5.png +0 -0
- package/assets/characters/minotaur-strategist/animations/working/6.png +0 -0
- package/assets/characters/minotaur-strategist/animations/working/7.png +0 -0
- package/assets/characters/minotaur-strategist/animations/working/8.png +0 -0
- package/assets/characters/minotaur-strategist/animations/working/9.png +0 -0
- package/assets/characters/minotaur-strategist/rotations/east.png +0 -0
- package/assets/characters/minotaur-strategist/rotations/north.png +0 -0
- package/assets/characters/minotaur-strategist/rotations/south.png +0 -0
- package/assets/characters/minotaur-strategist/rotations/west.png +0 -0
- package/assets/characters/minotaur-strategist/voice-lines/arrive.mp3 +0 -0
- package/assets/characters/minotaur-strategist/voice-lines/attention.mp3 +0 -0
- package/assets/characters/minotaur-strategist/voice-lines/complete.mp3 +0 -0
- package/assets/characters/minotaur-strategist/voice-lines/death.mp3 +0 -0
- package/assets/characters/minotaur-strategist/voice-lines/move_variant_1.mp3 +0 -0
- package/assets/characters/minotaur-strategist/voice-lines/move_variant_2.mp3 +0 -0
- package/assets/characters/minotaur-strategist/voice-lines/move_variant_3.mp3 +0 -0
- package/assets/characters/minotaur-strategist/voice-lines/selected_variant_1.mp3 +0 -0
- package/assets/characters/minotaur-strategist/voice-lines/selected_variant_2.mp3 +0 -0
- package/assets/characters/minotaur-strategist/voice-lines/selected_variant_3.mp3 +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/east/0.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/east/1.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/east/2.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/east/3.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/east/4.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/east/5.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/east/6.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/east/7.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/north/0.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/north/1.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/north/2.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/north/3.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/north/4.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/north/5.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/north/6.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/north/7.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/south/0.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/south/1.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/south/2.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/south/3.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/south/4.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/south/5.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/south/6.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/south/7.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/west/0.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/west/1.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/west/2.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/west/3.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/west/4.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/west/5.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/west/6.png +0 -0
- package/assets/characters/moon-grove-druid/animations/walk/west/7.png +0 -0
- package/assets/characters/moon-grove-druid/animations/working/0.png +0 -0
- package/assets/characters/moon-grove-druid/animations/working/1.png +0 -0
- package/assets/characters/moon-grove-druid/animations/working/10.png +0 -0
- package/assets/characters/moon-grove-druid/animations/working/11.png +0 -0
- package/assets/characters/moon-grove-druid/animations/working/12.png +0 -0
- package/assets/characters/moon-grove-druid/animations/working/13.png +0 -0
- package/assets/characters/moon-grove-druid/animations/working/14.png +0 -0
- package/assets/characters/moon-grove-druid/animations/working/15.png +0 -0
- package/assets/characters/moon-grove-druid/animations/working/2.png +0 -0
- package/assets/characters/moon-grove-druid/animations/working/3.png +0 -0
- package/assets/characters/moon-grove-druid/animations/working/4.png +0 -0
- package/assets/characters/moon-grove-druid/animations/working/5.png +0 -0
- package/assets/characters/moon-grove-druid/animations/working/6.png +0 -0
- package/assets/characters/moon-grove-druid/animations/working/7.png +0 -0
- package/assets/characters/moon-grove-druid/animations/working/8.png +0 -0
- package/assets/characters/moon-grove-druid/animations/working/9.png +0 -0
- package/assets/characters/moon-grove-druid/rotations/east.png +0 -0
- package/assets/characters/moon-grove-druid/rotations/north.png +0 -0
- package/assets/characters/moon-grove-druid/rotations/south.png +0 -0
- package/assets/characters/moon-grove-druid/rotations/west.png +0 -0
- package/assets/characters/moon-grove-druid/voice-lines/arrive.mp3 +0 -0
- package/assets/characters/moon-grove-druid/voice-lines/attention.mp3 +0 -0
- package/assets/characters/moon-grove-druid/voice-lines/complete.mp3 +0 -0
- package/assets/characters/moon-grove-druid/voice-lines/death.mp3 +0 -0
- package/assets/characters/moon-grove-druid/voice-lines/move_variant_1.mp3 +0 -0
- package/assets/characters/moon-grove-druid/voice-lines/move_variant_2.mp3 +0 -0
- package/assets/characters/moon-grove-druid/voice-lines/move_variant_3.mp3 +0 -0
- package/assets/characters/moon-grove-druid/voice-lines/selected_variant_1.mp3 +0 -0
- package/assets/characters/moon-grove-druid/voice-lines/selected_variant_2.mp3 +0 -0
- package/assets/characters/moon-grove-druid/voice-lines/selected_variant_3.mp3 +0 -0
- package/assets/characters/necromancer-male/animations/walk/east/0.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/east/1.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/east/2.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/east/3.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/east/4.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/east/5.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/east/6.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/east/7.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/north/0.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/north/1.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/north/2.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/north/3.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/north/4.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/north/5.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/north/6.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/north/7.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/south/0.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/south/1.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/south/2.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/south/3.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/south/4.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/south/5.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/south/6.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/south/7.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/west/0.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/west/1.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/west/2.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/west/3.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/west/4.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/west/5.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/west/6.png +0 -0
- package/assets/characters/necromancer-male/animations/walk/west/7.png +0 -0
- package/assets/characters/necromancer-male/animations/working/0.png +0 -0
- package/assets/characters/necromancer-male/animations/working/1.png +0 -0
- package/assets/characters/necromancer-male/animations/working/10.png +0 -0
- package/assets/characters/necromancer-male/animations/working/11.png +0 -0
- package/assets/characters/necromancer-male/animations/working/12.png +0 -0
- package/assets/characters/necromancer-male/animations/working/13.png +0 -0
- package/assets/characters/necromancer-male/animations/working/14.png +0 -0
- package/assets/characters/necromancer-male/animations/working/15.png +0 -0
- package/assets/characters/necromancer-male/animations/working/2.png +0 -0
- package/assets/characters/necromancer-male/animations/working/3.png +0 -0
- package/assets/characters/necromancer-male/animations/working/4.png +0 -0
- package/assets/characters/necromancer-male/animations/working/5.png +0 -0
- package/assets/characters/necromancer-male/animations/working/6.png +0 -0
- package/assets/characters/necromancer-male/animations/working/7.png +0 -0
- package/assets/characters/necromancer-male/animations/working/8.png +0 -0
- package/assets/characters/necromancer-male/animations/working/9.png +0 -0
- package/assets/characters/necromancer-male/rotations/east.png +0 -0
- package/assets/characters/necromancer-male/rotations/north.png +0 -0
- package/assets/characters/necromancer-male/rotations/south.png +0 -0
- package/assets/characters/necromancer-male/rotations/west.png +0 -0
- package/assets/characters/necromancer-male/voice-lines/arrive.mp3 +0 -0
- package/assets/characters/necromancer-male/voice-lines/attention.mp3 +0 -0
- package/assets/characters/necromancer-male/voice-lines/complete.mp3 +0 -0
- package/assets/characters/necromancer-male/voice-lines/death.mp3 +0 -0
- package/assets/characters/necromancer-male/voice-lines/move_variant_1.mp3 +0 -0
- package/assets/characters/necromancer-male/voice-lines/move_variant_2.mp3 +0 -0
- package/assets/characters/necromancer-male/voice-lines/move_variant_3.mp3 +0 -0
- package/assets/characters/necromancer-male/voice-lines/selected_variant_1.mp3 +0 -0
- package/assets/characters/necromancer-male/voice-lines/selected_variant_2.mp3 +0 -0
- package/assets/characters/necromancer-male/voice-lines/selected_variant_3.mp3 +0 -0
- package/assets/characters/oracle-seer/animations/walk/east/0.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/east/1.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/east/2.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/east/3.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/east/4.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/east/5.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/east/6.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/east/7.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/north/0.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/north/1.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/north/2.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/north/3.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/north/4.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/north/5.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/north/6.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/north/7.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/south/0.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/south/1.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/south/2.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/south/3.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/south/4.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/south/5.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/south/6.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/south/7.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/west/0.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/west/1.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/west/2.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/west/3.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/west/4.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/west/5.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/west/6.png +0 -0
- package/assets/characters/oracle-seer/animations/walk/west/7.png +0 -0
- package/assets/characters/oracle-seer/animations/working/0.png +0 -0
- package/assets/characters/oracle-seer/animations/working/1.png +0 -0
- package/assets/characters/oracle-seer/animations/working/10.png +0 -0
- package/assets/characters/oracle-seer/animations/working/11.png +0 -0
- package/assets/characters/oracle-seer/animations/working/12.png +0 -0
- package/assets/characters/oracle-seer/animations/working/13.png +0 -0
- package/assets/characters/oracle-seer/animations/working/14.png +0 -0
- package/assets/characters/oracle-seer/animations/working/15.png +0 -0
- package/assets/characters/oracle-seer/animations/working/2.png +0 -0
- package/assets/characters/oracle-seer/animations/working/3.png +0 -0
- package/assets/characters/oracle-seer/animations/working/4.png +0 -0
- package/assets/characters/oracle-seer/animations/working/5.png +0 -0
- package/assets/characters/oracle-seer/animations/working/6.png +0 -0
- package/assets/characters/oracle-seer/animations/working/7.png +0 -0
- package/assets/characters/oracle-seer/animations/working/8.png +0 -0
- package/assets/characters/oracle-seer/animations/working/9.png +0 -0
- package/assets/characters/oracle-seer/rotations/east.png +0 -0
- package/assets/characters/oracle-seer/rotations/north.png +0 -0
- package/assets/characters/oracle-seer/rotations/south.png +0 -0
- package/assets/characters/oracle-seer/rotations/west.png +0 -0
- package/assets/characters/oracle-seer/voice-lines/arrive.mp3 +0 -0
- package/assets/characters/oracle-seer/voice-lines/attention.mp3 +0 -0
- package/assets/characters/oracle-seer/voice-lines/complete.mp3 +0 -0
- package/assets/characters/oracle-seer/voice-lines/death.mp3 +0 -0
- package/assets/characters/oracle-seer/voice-lines/move_variant_1.mp3 +0 -0
- package/assets/characters/oracle-seer/voice-lines/move_variant_2.mp3 +0 -0
- package/assets/characters/oracle-seer/voice-lines/move_variant_3.mp3 +0 -0
- package/assets/characters/oracle-seer/voice-lines/selected_variant_1.mp3 +0 -0
- package/assets/characters/oracle-seer/voice-lines/selected_variant_2.mp3 +0 -0
- package/assets/characters/oracle-seer/voice-lines/selected_variant_3.mp3 +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/east/0.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/east/1.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/east/2.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/east/3.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/east/4.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/east/5.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/east/6.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/east/7.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/north/0.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/north/1.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/north/2.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/north/3.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/north/4.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/north/5.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/north/6.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/north/7.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/south/0.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/south/1.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/south/2.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/south/3.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/south/4.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/south/5.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/south/6.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/south/7.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/west/0.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/west/1.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/west/2.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/west/3.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/west/4.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/west/5.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/west/6.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/walk/west/7.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/working/0.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/working/1.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/working/10.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/working/11.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/working/12.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/working/13.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/working/14.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/working/15.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/working/2.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/working/3.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/working/4.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/working/5.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/working/6.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/working/7.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/working/8.png +0 -0
- package/assets/characters/pyromancer-wizard/animations/working/9.png +0 -0
- package/assets/characters/pyromancer-wizard/rotations/east.png +0 -0
- package/assets/characters/pyromancer-wizard/rotations/north.png +0 -0
- package/assets/characters/pyromancer-wizard/rotations/south.png +0 -0
- package/assets/characters/pyromancer-wizard/rotations/west.png +0 -0
- package/assets/characters/pyromancer-wizard/voice-lines/arrive.mp3 +0 -0
- package/assets/characters/pyromancer-wizard/voice-lines/attention.mp3 +0 -0
- package/assets/characters/pyromancer-wizard/voice-lines/complete.mp3 +0 -0
- package/assets/characters/pyromancer-wizard/voice-lines/death.mp3 +0 -0
- package/assets/characters/pyromancer-wizard/voice-lines/move_variant_1.mp3 +0 -0
- package/assets/characters/pyromancer-wizard/voice-lines/move_variant_2.mp3 +0 -0
- package/assets/characters/pyromancer-wizard/voice-lines/move_variant_3.mp3 +0 -0
- package/assets/characters/pyromancer-wizard/voice-lines/selected_variant_1.mp3 +0 -0
- package/assets/characters/pyromancer-wizard/voice-lines/selected_variant_2.mp3 +0 -0
- package/assets/characters/pyromancer-wizard/voice-lines/selected_variant_3.mp3 +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/east/0.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/east/1.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/east/2.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/east/3.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/east/4.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/east/5.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/east/6.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/east/7.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/north/0.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/north/1.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/north/2.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/north/3.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/north/4.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/north/5.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/north/6.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/north/7.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/south/0.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/south/1.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/south/2.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/south/3.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/south/4.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/south/5.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/south/6.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/south/7.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/west/0.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/west/1.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/west/2.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/west/3.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/west/4.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/west/5.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/west/6.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/walk/west/7.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/working/0.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/working/1.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/working/10.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/working/11.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/working/12.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/working/13.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/working/14.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/working/15.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/working/2.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/working/3.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/working/4.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/working/5.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/working/6.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/working/7.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/working/8.png +0 -0
- package/assets/characters/sun-priestess-healer/animations/working/9.png +0 -0
- package/assets/characters/sun-priestess-healer/rotations/east.png +0 -0
- package/assets/characters/sun-priestess-healer/rotations/north.png +0 -0
- package/assets/characters/sun-priestess-healer/rotations/south.png +0 -0
- package/assets/characters/sun-priestess-healer/rotations/west.png +0 -0
- package/assets/characters/sun-priestess-healer/voice-lines/arrive.mp3 +0 -0
- package/assets/characters/sun-priestess-healer/voice-lines/attention.mp3 +0 -0
- package/assets/characters/sun-priestess-healer/voice-lines/complete.mp3 +0 -0
- package/assets/characters/sun-priestess-healer/voice-lines/death.mp3 +0 -0
- package/assets/characters/sun-priestess-healer/voice-lines/move_variant_1.mp3 +0 -0
- package/assets/characters/sun-priestess-healer/voice-lines/move_variant_2.mp3 +0 -0
- package/assets/characters/sun-priestess-healer/voice-lines/move_variant_3.mp3 +0 -0
- package/assets/characters/sun-priestess-healer/voice-lines/selected_variant_1.mp3 +0 -0
- package/assets/characters/sun-priestess-healer/voice-lines/selected_variant_2.mp3 +0 -0
- package/assets/characters/sun-priestess-healer/voice-lines/selected_variant_3.mp3 +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/east/0.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/east/1.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/east/2.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/east/3.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/east/4.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/east/5.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/east/6.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/east/7.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/north/0.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/north/1.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/north/2.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/north/3.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/north/4.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/north/5.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/north/6.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/north/7.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/south/0.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/south/1.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/south/2.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/south/3.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/south/4.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/south/5.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/south/6.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/south/7.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/west/0.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/west/1.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/west/2.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/west/3.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/west/4.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/west/5.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/west/6.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/walk/west/7.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/working/0.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/working/1.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/working/10.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/working/11.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/working/12.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/working/13.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/working/14.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/working/15.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/working/2.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/working/3.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/working/4.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/working/5.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/working/6.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/working/7.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/working/8.png +0 -0
- package/assets/characters/valkyrie-spearmaid/animations/working/9.png +0 -0
- package/assets/characters/valkyrie-spearmaid/rotations/east.png +0 -0
- package/assets/characters/valkyrie-spearmaid/rotations/north.png +0 -0
- package/assets/characters/valkyrie-spearmaid/rotations/south.png +0 -0
- package/assets/characters/valkyrie-spearmaid/rotations/west.png +0 -0
- package/assets/characters/valkyrie-spearmaid/voice-lines/arrive.mp3 +0 -0
- package/assets/characters/valkyrie-spearmaid/voice-lines/attention.mp3 +0 -0
- package/assets/characters/valkyrie-spearmaid/voice-lines/complete.mp3 +0 -0
- package/assets/characters/valkyrie-spearmaid/voice-lines/death.mp3 +0 -0
- package/assets/characters/valkyrie-spearmaid/voice-lines/move_variant_1.mp3 +0 -0
- package/assets/characters/valkyrie-spearmaid/voice-lines/move_variant_2.mp3 +0 -0
- package/assets/characters/valkyrie-spearmaid/voice-lines/move_variant_3.mp3 +0 -0
- package/assets/characters/valkyrie-spearmaid/voice-lines/selected_variant_1.mp3 +0 -0
- package/assets/characters/valkyrie-spearmaid/voice-lines/selected_variant_2.mp3 +0 -0
- package/assets/characters/valkyrie-spearmaid/voice-lines/selected_variant_3.mp3 +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/east/0.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/east/1.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/east/2.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/east/3.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/east/4.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/east/5.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/east/6.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/east/7.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/north/0.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/north/1.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/north/2.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/north/3.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/north/4.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/north/5.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/north/6.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/north/7.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/south/0.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/south/1.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/south/2.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/south/3.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/south/4.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/south/5.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/south/6.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/south/7.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/west/0.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/west/1.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/west/2.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/west/3.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/west/4.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/west/5.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/west/6.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/walk/west/7.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/working/0.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/working/1.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/working/10.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/working/11.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/working/12.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/working/13.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/working/14.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/working/15.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/working/2.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/working/3.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/working/4.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/working/5.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/working/6.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/working/7.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/working/8.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/animations/working/9.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/rotations/east.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/rotations/north.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/rotations/south.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/rotations/west.png +0 -0
- package/assets/characters/witch-hunter-gunslinger/voice-lines/arrive.mp3 +0 -0
- package/assets/characters/witch-hunter-gunslinger/voice-lines/attention.mp3 +0 -0
- package/assets/characters/witch-hunter-gunslinger/voice-lines/complete.mp3 +0 -0
- package/assets/characters/witch-hunter-gunslinger/voice-lines/death.mp3 +0 -0
- package/assets/characters/witch-hunter-gunslinger/voice-lines/move_variant_1.mp3 +0 -0
- package/assets/characters/witch-hunter-gunslinger/voice-lines/move_variant_2.mp3 +0 -0
- package/assets/characters/witch-hunter-gunslinger/voice-lines/move_variant_3.mp3 +0 -0
- package/assets/characters/witch-hunter-gunslinger/voice-lines/selected_variant_1.mp3 +0 -0
- package/assets/characters/witch-hunter-gunslinger/voice-lines/selected_variant_2.mp3 +0 -0
- package/assets/characters/witch-hunter-gunslinger/voice-lines/selected_variant_3.mp3 +0 -0
- package/assets/maps/backgrounds/outpost-v1-2x.png +0 -0
- package/assets/maps/backgrounds/outpost-v1-original.png +0 -0
- package/assets/maps/backgrounds/outpost-v1-upscaled-2x-photo.png +0 -0
- package/assets/maps/backgrounds/outpost-v1.png +0 -0
- package/assets/maps/outpost.json +130 -0
- package/assets/maps/outpost.logic.json +26197 -0
- package/config.example.yaml +91 -0
- package/dist/client/assets/index-B0hs4377.js +80 -0
- package/dist/client/assets/index-TxsheMVB.css +32 -0
- package/dist/client/index.html +13 -0
- package/dist/client/map-mask-editor.html +1853 -0
- package/dist/server/server/assets/avatarCatalog.js +37 -0
- package/dist/server/server/assets/voiceLineCatalog.js +42 -0
- package/dist/server/server/bootstrap/httpApp.js +39 -0
- package/dist/server/server/bootstrap/serverContext.js +60 -0
- package/dist/server/server/bootstrap/shutdown.js +152 -0
- package/dist/server/server/bootstrap/shutdown.test.js +142 -0
- package/dist/server/server/bootstrap/websocketUpgrade.js +111 -0
- package/dist/server/server/bootstrap/websocketUpgrade.test.js +83 -0
- package/dist/server/server/bootstrapApp.js +89 -0
- package/dist/server/server/cli.js +452 -0
- package/dist/server/server/config/discovery.js +159 -0
- package/dist/server/server/config/loadConfig.js +121 -0
- package/dist/server/server/config/schema.js +121 -0
- package/dist/server/server/http/appError.js +30 -0
- package/dist/server/server/http/errorResponse.js +31 -0
- package/dist/server/server/http/errorResponse.test.js +46 -0
- package/dist/server/server/http/requestParsers.js +133 -0
- package/dist/server/server/http/requestParsers.test.js +57 -0
- package/dist/server/server/http/routes/registerApiRoutes.js +146 -0
- package/dist/server/server/index.js +9 -0
- package/dist/server/server/orchestrator/orchestratorService.js +378 -0
- package/dist/server/server/orchestrator/orchestratorService.test.js +111 -0
- package/dist/server/server/orchestrator/reconcile/isSameWorkerRecord.js +17 -0
- package/dist/server/server/orchestrator/spawn/avatarAllocator.js +20 -0
- package/dist/server/server/orchestrator/spawn/command.js +37 -0
- package/dist/server/server/orchestrator/spawn/command.test.js +39 -0
- package/dist/server/server/orchestrator/spawn/resolveSpawnPlan.js +44 -0
- package/dist/server/server/orchestrator/spawn/resolveSpawnPlan.test.js +79 -0
- package/dist/server/server/orchestrator/spawn/spawnPosition.js +147 -0
- package/dist/server/server/orchestrator/spawn/types.js +2 -0
- package/dist/server/server/orchestrator/spawn/windowName.js +12 -0
- package/dist/server/server/persistence/workerRepository.js +211 -0
- package/dist/server/server/status/activityParser.js +172 -0
- package/dist/server/server/status/claudeTranscript/accumulator.js +372 -0
- package/dist/server/server/status/claudeTranscript/constants.js +18 -0
- package/dist/server/server/status/claudeTranscript/io.js +160 -0
- package/dist/server/server/status/claudeTranscript/parser.js +50 -0
- package/dist/server/server/status/claudeTranscript/snapshot.js +82 -0
- package/dist/server/server/status/claudeTranscript/types.js +2 -0
- package/dist/server/server/status/claudeTranscriptTracker.js +59 -0
- package/dist/server/server/status/engine/signalContext.js +41 -0
- package/dist/server/server/status/engine/stateMachine/activity.js +18 -0
- package/dist/server/server/status/engine/stateMachine/constants.js +45 -0
- package/dist/server/server/status/engine/stateMachine/decision.js +213 -0
- package/dist/server/server/status/engine/stateMachine/decision.test.js +139 -0
- package/dist/server/server/status/engine/stateMachine/helpers.js +103 -0
- package/dist/server/server/status/engine/stateMachine/helpers.test.js +113 -0
- package/dist/server/server/status/engine/stateMachine/idleBlockers.js +55 -0
- package/dist/server/server/status/engine/stateMachine/parserErrorRules.js +42 -0
- package/dist/server/server/status/engine/stateMachine/types.js +2 -0
- package/dist/server/server/status/engine/stateMachine/workingEvidence.js +97 -0
- package/dist/server/server/status/engine/stateMachine.js +5 -0
- package/dist/server/server/status/engine/types.js +4 -0
- package/dist/server/server/status/paneObservation.js +35 -0
- package/dist/server/server/status/runtime/activityTextExtractors.js +189 -0
- package/dist/server/server/status/runtime/claudeSignals.js +56 -0
- package/dist/server/server/status/runtime/openCodeSignals.js +63 -0
- package/dist/server/server/status/runtime/sessionDetection.js +37 -0
- package/dist/server/server/status/runtime/textSignals.js +21 -0
- package/dist/server/server/status/runtimeSignals.js +21 -0
- package/dist/server/server/status/statusEvaluator.js +16 -0
- package/dist/server/server/status/statusHeuristics.js +146 -0
- package/dist/server/server/status/statusMonitor.js +390 -0
- package/dist/server/server/status/statusMonitor.test.js +191 -0
- package/dist/server/server/status/statusPipeline.js +45 -0
- package/dist/server/server/tmux/tmuxAdapter.js +338 -0
- package/dist/server/server/utils/appRoot.js +40 -0
- package/dist/server/server/utils/path.js +20 -0
- package/dist/server/server/ws/realtimeHub.js +44 -0
- package/dist/server/server/ws/realtimeHub.test.js +43 -0
- package/dist/server/server/ws/terminalBridge.js +153 -0
- package/dist/server/shared/types.js +2 -0
- package/package.json +68 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.resolveTranscriptPath = resolveTranscriptPath;
|
|
7
|
+
exports.collectTranscriptInputLines = collectTranscriptInputLines;
|
|
8
|
+
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
const constants_1 = require("./constants");
|
|
11
|
+
const accumulator_1 = require("./accumulator");
|
|
12
|
+
async function resolveTranscriptPath({ worker, state, paneCurrentPath, nowMs }) {
|
|
13
|
+
if (state.transcriptPath && (await isPathToFile(state.transcriptPath))) {
|
|
14
|
+
state.nextTranscriptLookupAtMs = 0;
|
|
15
|
+
return state.transcriptPath;
|
|
16
|
+
}
|
|
17
|
+
if (nowMs < state.nextTranscriptLookupAtMs) {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
const candidateDirs = buildTranscriptCandidateDirs(worker.projectPath, paneCurrentPath);
|
|
21
|
+
const sessionId = extractSessionId(worker.command);
|
|
22
|
+
for (const transcriptDir of candidateDirs) {
|
|
23
|
+
if (!(await isPathToDirectory(transcriptDir))) {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
if (sessionId) {
|
|
27
|
+
const directPath = node_path_1.default.join(transcriptDir, `${sessionId}.jsonl`);
|
|
28
|
+
if (await isPathToFile(directPath)) {
|
|
29
|
+
state.nextTranscriptLookupAtMs = 0;
|
|
30
|
+
return directPath;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const latest = await findLatestTranscriptFile(transcriptDir, nowMs);
|
|
34
|
+
if (latest) {
|
|
35
|
+
state.nextTranscriptLookupAtMs = 0;
|
|
36
|
+
return latest;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
state.nextTranscriptLookupAtMs = nowMs + constants_1.transcriptLookupRetryMs;
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
async function collectTranscriptInputLines(state) {
|
|
43
|
+
const transcriptPath = state.transcriptPath;
|
|
44
|
+
if (!transcriptPath) {
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
const stats = await promises_1.default.stat(transcriptPath);
|
|
48
|
+
if (!stats.isFile()) {
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
51
|
+
if (!state.initialized || stats.size < state.fileOffset) {
|
|
52
|
+
return bootstrapFromTail(state, transcriptPath, stats.size);
|
|
53
|
+
}
|
|
54
|
+
if (stats.size === state.fileOffset) {
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
57
|
+
const chunk = await readFileRange(transcriptPath, state.fileOffset, stats.size - state.fileOffset);
|
|
58
|
+
state.fileOffset = stats.size;
|
|
59
|
+
return collectLinesFromChunk(state, chunk, false);
|
|
60
|
+
}
|
|
61
|
+
function buildTranscriptCandidateDirs(workerProjectPath, paneCurrentPath) {
|
|
62
|
+
const candidates = [paneCurrentPath, workerProjectPath]
|
|
63
|
+
.filter((value) => typeof value === "string" && value.trim().length > 0)
|
|
64
|
+
.map((projectPathValue) => node_path_1.default.join(constants_1.claudeProjectRoot, projectPathValue.replace(/[^a-zA-Z0-9-]/g, "-")));
|
|
65
|
+
const unique = new Set();
|
|
66
|
+
for (const candidate of candidates) {
|
|
67
|
+
unique.add(candidate);
|
|
68
|
+
}
|
|
69
|
+
return [...unique];
|
|
70
|
+
}
|
|
71
|
+
async function findLatestTranscriptFile(directoryPath, nowMs) {
|
|
72
|
+
let latestPath;
|
|
73
|
+
let latestMtimeMs = 0;
|
|
74
|
+
const entries = await promises_1.default.readdir(directoryPath, { withFileTypes: true });
|
|
75
|
+
for (const entry of entries) {
|
|
76
|
+
if (!entry.isFile() || !entry.name.endsWith(".jsonl")) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
const fullPath = node_path_1.default.join(directoryPath, entry.name);
|
|
80
|
+
const stats = await promises_1.default.stat(fullPath);
|
|
81
|
+
if (!stats.isFile()) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (stats.mtimeMs > latestMtimeMs) {
|
|
85
|
+
latestMtimeMs = stats.mtimeMs;
|
|
86
|
+
latestPath = fullPath;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (!latestPath) {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
if (nowMs - latestMtimeMs > constants_1.maxRecentTranscriptAgeMs) {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
return latestPath;
|
|
96
|
+
}
|
|
97
|
+
async function readFileRange(filePath, startOffset, length) {
|
|
98
|
+
if (length <= 0) {
|
|
99
|
+
return "";
|
|
100
|
+
}
|
|
101
|
+
const fileHandle = await promises_1.default.open(filePath, "r");
|
|
102
|
+
try {
|
|
103
|
+
const buffer = Buffer.alloc(length);
|
|
104
|
+
await fileHandle.read(buffer, 0, length, startOffset);
|
|
105
|
+
return buffer.toString("utf8");
|
|
106
|
+
}
|
|
107
|
+
finally {
|
|
108
|
+
await fileHandle.close();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async function bootstrapFromTail(state, transcriptPath, fileSize) {
|
|
112
|
+
const readLength = Math.min(fileSize, constants_1.bootstrapTailBytes);
|
|
113
|
+
const startOffset = fileSize - readLength;
|
|
114
|
+
const chunk = await readFileRange(transcriptPath, startOffset, readLength);
|
|
115
|
+
(0, accumulator_1.resetTranscriptState)(state);
|
|
116
|
+
state.fileOffset = fileSize;
|
|
117
|
+
state.initialized = true;
|
|
118
|
+
return collectLinesFromChunk(state, chunk, startOffset > 0);
|
|
119
|
+
}
|
|
120
|
+
function collectLinesFromChunk(state, chunk, dropFirstLine) {
|
|
121
|
+
const combined = state.lineBuffer + chunk;
|
|
122
|
+
const lines = combined.split("\n");
|
|
123
|
+
state.lineBuffer = lines.pop() ?? "";
|
|
124
|
+
if (dropFirstLine && lines.length > 0) {
|
|
125
|
+
lines.shift();
|
|
126
|
+
}
|
|
127
|
+
return lines;
|
|
128
|
+
}
|
|
129
|
+
async function isPathToFile(filePath) {
|
|
130
|
+
try {
|
|
131
|
+
const stats = await promises_1.default.stat(filePath);
|
|
132
|
+
return stats.isFile();
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
async function isPathToDirectory(directoryPath) {
|
|
139
|
+
try {
|
|
140
|
+
const stats = await promises_1.default.stat(directoryPath);
|
|
141
|
+
return stats.isDirectory();
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function extractSessionId(command) {
|
|
148
|
+
for (let index = 0; index < command.length; index += 1) {
|
|
149
|
+
const token = command[index];
|
|
150
|
+
if (token === "--session-id") {
|
|
151
|
+
const nextToken = command[index + 1];
|
|
152
|
+
return typeof nextToken === "string" && nextToken.trim().length > 0 ? nextToken : undefined;
|
|
153
|
+
}
|
|
154
|
+
if (token.startsWith("--session-id=")) {
|
|
155
|
+
const value = token.slice("--session-id=".length).trim();
|
|
156
|
+
return value.length > 0 ? value : undefined;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return undefined;
|
|
160
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extractTranscriptRecords = extractTranscriptRecords;
|
|
4
|
+
exports.parseRecord = parseRecord;
|
|
5
|
+
exports.readRecord = readRecord;
|
|
6
|
+
exports.readArray = readArray;
|
|
7
|
+
exports.readString = readString;
|
|
8
|
+
function extractTranscriptRecords(lines) {
|
|
9
|
+
const records = [];
|
|
10
|
+
for (const rawLine of lines) {
|
|
11
|
+
const trimmed = rawLine.trim();
|
|
12
|
+
if (!trimmed) {
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
const record = parseRecord(trimmed);
|
|
16
|
+
if (!record) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
const recordType = readString(record.type);
|
|
20
|
+
if (recordType !== "assistant" && recordType !== "user" && recordType !== "system" && recordType !== "progress") {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
records.push({
|
|
24
|
+
type: recordType,
|
|
25
|
+
record
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return records;
|
|
29
|
+
}
|
|
30
|
+
function parseRecord(line) {
|
|
31
|
+
try {
|
|
32
|
+
const parsed = JSON.parse(line);
|
|
33
|
+
return readRecord(parsed) ?? undefined;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function readRecord(value) {
|
|
40
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
function readArray(value) {
|
|
46
|
+
return Array.isArray(value) ? value : undefined;
|
|
47
|
+
}
|
|
48
|
+
function readString(value) {
|
|
49
|
+
return typeof value === "string" ? value : undefined;
|
|
50
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildSnapshot = buildSnapshot;
|
|
4
|
+
const constants_1 = require("./constants");
|
|
5
|
+
const accumulator_1 = require("./accumulator");
|
|
6
|
+
function buildSnapshot(state, nowMs) {
|
|
7
|
+
if (!state.seenTranscriptRecord) {
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
const activeTools = listFreshActiveTools(state, nowMs);
|
|
11
|
+
const mostRecentTool = activeTools.reduce((latest, current) => {
|
|
12
|
+
if (!latest) {
|
|
13
|
+
return current;
|
|
14
|
+
}
|
|
15
|
+
if (current.lastProgressAtMs >= latest.lastProgressAtMs) {
|
|
16
|
+
return current;
|
|
17
|
+
}
|
|
18
|
+
return latest;
|
|
19
|
+
}, undefined);
|
|
20
|
+
const hasAskUserQuestion = activeTools.some((entry) => (0, accumulator_1.normalizeToolName)(entry.toolName) === "askuserquestion");
|
|
21
|
+
const hasNonExemptActiveTools = activeTools.some((entry) => !constants_1.permissionExemptTools.has((0, accumulator_1.normalizeToolName)(entry.toolName)));
|
|
22
|
+
const isPermissionWait = hasNonExemptActiveTools && nowMs - state.lastEventAtMs >= constants_1.permissionIdleDelayMs;
|
|
23
|
+
const isActivelyWorking = activeTools.length > 0 || nowMs <= state.busyUntilMs;
|
|
24
|
+
let status = "idle";
|
|
25
|
+
if (hasAskUserQuestion || isPermissionWait) {
|
|
26
|
+
status = "attention";
|
|
27
|
+
}
|
|
28
|
+
else if (isActivelyWorking && !state.waiting) {
|
|
29
|
+
status = "working";
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
status = "idle";
|
|
33
|
+
}
|
|
34
|
+
let activityText = mostRecentTool?.statusText ?? state.lastActivityText;
|
|
35
|
+
let activityTool = mostRecentTool?.activityTool ?? state.lastActivityTool;
|
|
36
|
+
let activityPath = mostRecentTool?.activityPath ?? state.lastActivityPath;
|
|
37
|
+
if (hasAskUserQuestion) {
|
|
38
|
+
activityText = "Waiting for your answer";
|
|
39
|
+
activityTool = "terminal";
|
|
40
|
+
}
|
|
41
|
+
else if (isPermissionWait) {
|
|
42
|
+
activityText = activityText ?? "Waiting for approval";
|
|
43
|
+
activityTool = activityTool ?? "terminal";
|
|
44
|
+
}
|
|
45
|
+
if (status === "idle" && activityText === "Waiting for approval") {
|
|
46
|
+
activityText = undefined;
|
|
47
|
+
activityTool = undefined;
|
|
48
|
+
activityPath = undefined;
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
status,
|
|
52
|
+
activityText,
|
|
53
|
+
activityTool,
|
|
54
|
+
activityPath
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function listActiveTools(state) {
|
|
58
|
+
const entries = [];
|
|
59
|
+
for (const entry of state.activeTools.values()) {
|
|
60
|
+
entries.push(entry);
|
|
61
|
+
}
|
|
62
|
+
for (const subagentTools of state.activeSubagentTools.values()) {
|
|
63
|
+
for (const entry of subagentTools.values()) {
|
|
64
|
+
entries.push(entry);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return entries;
|
|
68
|
+
}
|
|
69
|
+
function listFreshActiveTools(state, nowMs) {
|
|
70
|
+
const entries = listActiveTools(state);
|
|
71
|
+
if (entries.length === 0) {
|
|
72
|
+
return entries;
|
|
73
|
+
}
|
|
74
|
+
if (state.lastEventAtMs <= 0) {
|
|
75
|
+
return entries;
|
|
76
|
+
}
|
|
77
|
+
const transcriptQuietForMs = nowMs - state.lastEventAtMs;
|
|
78
|
+
if (transcriptQuietForMs <= constants_1.activeToolStaleAfterMs) {
|
|
79
|
+
return entries;
|
|
80
|
+
}
|
|
81
|
+
return entries.filter((entry) => nowMs - entry.lastProgressAtMs <= constants_1.activeToolStaleAfterMs);
|
|
82
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ClaudeTranscriptTracker = void 0;
|
|
4
|
+
const accumulator_1 = require("./claudeTranscript/accumulator");
|
|
5
|
+
const io_1 = require("./claudeTranscript/io");
|
|
6
|
+
const parser_1 = require("./claudeTranscript/parser");
|
|
7
|
+
const snapshot_1 = require("./claudeTranscript/snapshot");
|
|
8
|
+
const sessionDetection_1 = require("./runtime/sessionDetection");
|
|
9
|
+
class ClaudeTranscriptTracker {
|
|
10
|
+
states = new Map();
|
|
11
|
+
async poll(worker, paneCurrentCommand, paneCurrentPath) {
|
|
12
|
+
if (!(0, sessionDetection_1.isLikelyClaudeSession)(worker, paneCurrentCommand.toLowerCase())) {
|
|
13
|
+
this.states.delete(worker.id);
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
const state = this.getState(worker.id);
|
|
17
|
+
let transcriptPath;
|
|
18
|
+
try {
|
|
19
|
+
transcriptPath = await (0, io_1.resolveTranscriptPath)({
|
|
20
|
+
worker,
|
|
21
|
+
state,
|
|
22
|
+
paneCurrentPath,
|
|
23
|
+
nowMs: Date.now()
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
if (!transcriptPath) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
if (state.transcriptPath !== transcriptPath) {
|
|
33
|
+
state.transcriptPath = transcriptPath;
|
|
34
|
+
(0, accumulator_1.resetTranscriptState)(state);
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
const lines = await (0, io_1.collectTranscriptInputLines)(state);
|
|
38
|
+
const records = (0, parser_1.extractTranscriptRecords)(lines);
|
|
39
|
+
(0, accumulator_1.applyParsedTranscriptRecords)(state, records);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
return (0, snapshot_1.buildSnapshot)(state, Date.now());
|
|
45
|
+
}
|
|
46
|
+
forget(workerId) {
|
|
47
|
+
this.states.delete(workerId);
|
|
48
|
+
}
|
|
49
|
+
getState(workerId) {
|
|
50
|
+
const existing = this.states.get(workerId);
|
|
51
|
+
if (existing) {
|
|
52
|
+
return existing;
|
|
53
|
+
}
|
|
54
|
+
const next = (0, accumulator_1.createTranscriptState)();
|
|
55
|
+
this.states.set(workerId, next);
|
|
56
|
+
return next;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.ClaudeTranscriptTracker = ClaudeTranscriptTracker;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildWorkerStatusSignalContext = buildWorkerStatusSignalContext;
|
|
4
|
+
const activityParser_1 = require("../activityParser");
|
|
5
|
+
const runtimeSignals_1 = require("../runtimeSignals");
|
|
6
|
+
function buildWorkerStatusSignalContext({ worker, currentCommand, output, observation, transcriptSnapshot, nowMs }) {
|
|
7
|
+
const parsed = (0, activityParser_1.parseActivity)(currentCommand, output);
|
|
8
|
+
const commandLower = currentCommand.toLowerCase();
|
|
9
|
+
const isClaude = (0, runtimeSignals_1.isLikelyClaudeSession)(worker, commandLower);
|
|
10
|
+
const openCodeSignals = (0, runtimeSignals_1.detectOpenCodeSignals)(output);
|
|
11
|
+
const isOpenCode = (0, runtimeSignals_1.isLikelyOpenCodeSession)(worker, commandLower) || openCodeSignals.prompt || openCodeSignals.active;
|
|
12
|
+
const runtimeActivityText = (0, runtimeSignals_1.extractRuntimeActivityText)(output, { isClaude, isOpenCode });
|
|
13
|
+
const activeClaudeTask = (0, runtimeSignals_1.extractClaudeActiveTask)(output);
|
|
14
|
+
const hasClaudeProgressSignal = isClaude && (0, runtimeSignals_1.hasClaudeLiveProgressSignal)(output);
|
|
15
|
+
const openCodePromptSignal = isOpenCode && openCodeSignals.prompt;
|
|
16
|
+
const openCodeActiveSignal = isOpenCode && openCodeSignals.active;
|
|
17
|
+
const outputQuietForMs = Math.max(0, nowMs - observation.lastOutputChangeAtMs);
|
|
18
|
+
const commandQuietForMs = Math.max(0, nowMs - observation.lastCommandChangeAtMs);
|
|
19
|
+
const createdAtMs = Date.parse(worker.createdAt);
|
|
20
|
+
const workerAgeMs = Number.isFinite(createdAtMs) ? Math.max(0, nowMs - createdAtMs) : Number.POSITIVE_INFINITY;
|
|
21
|
+
return {
|
|
22
|
+
worker,
|
|
23
|
+
nowMs,
|
|
24
|
+
currentCommand,
|
|
25
|
+
commandLower,
|
|
26
|
+
output,
|
|
27
|
+
observation,
|
|
28
|
+
transcriptSnapshot,
|
|
29
|
+
parsed,
|
|
30
|
+
runtimeActivityText,
|
|
31
|
+
activeClaudeTask,
|
|
32
|
+
hasClaudeProgressSignal,
|
|
33
|
+
hasOpenCodePromptSignal: openCodePromptSignal,
|
|
34
|
+
hasOpenCodeActiveSignal: openCodeActiveSignal,
|
|
35
|
+
isClaudeSession: isClaude,
|
|
36
|
+
isOpenCodeSession: isOpenCode,
|
|
37
|
+
outputQuietForMs,
|
|
38
|
+
commandQuietForMs,
|
|
39
|
+
workerAgeMs
|
|
40
|
+
};
|
|
41
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveWorkingActivity = resolveWorkingActivity;
|
|
4
|
+
const runtimeSignals_1 = require("../../runtimeSignals");
|
|
5
|
+
const helpers_1 = require("./helpers");
|
|
6
|
+
function resolveWorkingActivity(context, evidence) {
|
|
7
|
+
const fallbackText = (0, helpers_1.firstDefined)(...evidence.activityTextCandidates, context.transcriptSnapshot?.activityText, context.runtimeActivityText, context.activeClaudeTask, context.parsed.activity.text, context.worker.activityText);
|
|
8
|
+
const activityText = context.isOpenCodeSession
|
|
9
|
+
? (0, runtimeSignals_1.preferOpenCodeSpecificActivityText)(context.worker.activityText, fallbackText)
|
|
10
|
+
: fallbackText;
|
|
11
|
+
const activityTool = (0, helpers_1.firstDefined)(...evidence.activityToolCandidates, context.transcriptSnapshot?.activityTool, context.parsed.activity.tool, context.worker.activityTool, "terminal");
|
|
12
|
+
const activityPath = (0, helpers_1.firstDefined)(...evidence.activityPathCandidates, context.transcriptSnapshot?.activityPath, context.parsed.activity.filePath);
|
|
13
|
+
return {
|
|
14
|
+
activityText: activityText ?? "Working",
|
|
15
|
+
activityTool,
|
|
16
|
+
activityPath
|
|
17
|
+
};
|
|
18
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.shellPromptTailMatchers = exports.recoverableToolErrorMatchers = exports.fatalRuntimeErrorMatchers = exports.openCodeWorkingFreshWindowMs = exports.claudeWorkingFreshWindowMs = exports.genericWorkingFreshWindowMs = exports.claudeSpawnGraceMs = exports.cachedActivityWindowMs = exports.stickyWorkingWindowMs = exports.commandWarmupWindowMs = exports.recentErrorSignalWindowMs = exports.parsedStrongEvidenceWindowMs = void 0;
|
|
4
|
+
const parsedStrongEvidenceWindowMs = 8_000;
|
|
5
|
+
exports.parsedStrongEvidenceWindowMs = parsedStrongEvidenceWindowMs;
|
|
6
|
+
const recentErrorSignalWindowMs = 15_000;
|
|
7
|
+
exports.recentErrorSignalWindowMs = recentErrorSignalWindowMs;
|
|
8
|
+
const commandWarmupWindowMs = 2_250;
|
|
9
|
+
exports.commandWarmupWindowMs = commandWarmupWindowMs;
|
|
10
|
+
const stickyWorkingWindowMs = 3_500;
|
|
11
|
+
exports.stickyWorkingWindowMs = stickyWorkingWindowMs;
|
|
12
|
+
const cachedActivityWindowMs = 12_000;
|
|
13
|
+
exports.cachedActivityWindowMs = cachedActivityWindowMs;
|
|
14
|
+
const claudeSpawnGraceMs = 5_000;
|
|
15
|
+
exports.claudeSpawnGraceMs = claudeSpawnGraceMs;
|
|
16
|
+
const genericWorkingFreshWindowMs = 12_000;
|
|
17
|
+
exports.genericWorkingFreshWindowMs = genericWorkingFreshWindowMs;
|
|
18
|
+
const claudeWorkingFreshWindowMs = 10_000;
|
|
19
|
+
exports.claudeWorkingFreshWindowMs = claudeWorkingFreshWindowMs;
|
|
20
|
+
const openCodeWorkingFreshWindowMs = 12_000;
|
|
21
|
+
exports.openCodeWorkingFreshWindowMs = openCodeWorkingFreshWindowMs;
|
|
22
|
+
const fatalRuntimeErrorMatchers = [
|
|
23
|
+
/^traceback\b/i,
|
|
24
|
+
/^unhandled(?:\s+\w+)?\s+exception\b/i,
|
|
25
|
+
/^panic\b/i,
|
|
26
|
+
/^fatal\b/i,
|
|
27
|
+
/\b(out of memory|oom)\b/i,
|
|
28
|
+
/\bsig(?:segv|kill|term)\b/i
|
|
29
|
+
];
|
|
30
|
+
exports.fatalRuntimeErrorMatchers = fatalRuntimeErrorMatchers;
|
|
31
|
+
const recoverableToolErrorMatchers = [
|
|
32
|
+
/request failed with status code\s*:?\s*\d{3}/i,
|
|
33
|
+
/\b(?:unauthorized|forbidden|rate limit|too many requests)\b/i,
|
|
34
|
+
/\b(?:timed?\s*out|timeout)\b/i,
|
|
35
|
+
/\b(?:network error|connection reset|connection refused|econnreset|econnrefused|enotfound)\b/i,
|
|
36
|
+
/\bhttp(?:\s+status)?\s*(?:code)?\s*:?\s*(?:401|403|404|408|409|410|422|429|500|502|503|504)\b/i
|
|
37
|
+
];
|
|
38
|
+
exports.recoverableToolErrorMatchers = recoverableToolErrorMatchers;
|
|
39
|
+
const shellPromptTailMatchers = [
|
|
40
|
+
/[$#%]\s*$/,
|
|
41
|
+
/(?:❯|›|»|λ|➜|❱)\s*$/,
|
|
42
|
+
/^ps\s+[^>]*>\s*$/i,
|
|
43
|
+
/^[A-Za-z]:\\[^>]*>\s*$/
|
|
44
|
+
];
|
|
45
|
+
exports.shellPromptTailMatchers = shellPromptTailMatchers;
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deriveWorkerStatusDecision = deriveWorkerStatusDecision;
|
|
4
|
+
const idleBlockers_1 = require("./idleBlockers");
|
|
5
|
+
const parserErrorRules_1 = require("./parserErrorRules");
|
|
6
|
+
const activity_1 = require("./activity");
|
|
7
|
+
const workingEvidence_1 = require("./workingEvidence");
|
|
8
|
+
const helpers_1 = require("./helpers");
|
|
9
|
+
const constants_1 = require("./constants");
|
|
10
|
+
function deriveWorkerStatusDecision(context) {
|
|
11
|
+
const reasons = [];
|
|
12
|
+
const pushReason = (reason) => {
|
|
13
|
+
reasons.push(reason);
|
|
14
|
+
};
|
|
15
|
+
const transcriptStatus = context.transcriptSnapshot?.status;
|
|
16
|
+
if (transcriptStatus === "attention") {
|
|
17
|
+
pushReason({ code: "transcript-attention", message: "Transcript reports attention." });
|
|
18
|
+
const activityText = context.transcriptSnapshot?.activityText ?? "Waiting for input";
|
|
19
|
+
return finalizeDecision(context, {
|
|
20
|
+
status: "attention",
|
|
21
|
+
activityText,
|
|
22
|
+
activityTool: context.transcriptSnapshot?.activityTool ?? "terminal",
|
|
23
|
+
activityPath: context.transcriptSnapshot?.activityPath,
|
|
24
|
+
confidence: 0.96,
|
|
25
|
+
reasons,
|
|
26
|
+
parsedStrongSignal: false
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
if (context.parsed.activity.needsInput) {
|
|
30
|
+
pushReason({ code: "parser-input-prompt", message: "Terminal output indicates input is required." });
|
|
31
|
+
return finalizeDecision(context, {
|
|
32
|
+
status: "attention",
|
|
33
|
+
activityText: context.parsed.activity.text ?? "Waiting for input",
|
|
34
|
+
activityTool: context.parsed.activity.tool ?? "terminal",
|
|
35
|
+
activityPath: context.parsed.activity.filePath,
|
|
36
|
+
confidence: 0.9,
|
|
37
|
+
reasons,
|
|
38
|
+
parsedStrongSignal: false
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
if (transcriptStatus === "error") {
|
|
42
|
+
pushReason({ code: "transcript-error", message: "Transcript reports error." });
|
|
43
|
+
return finalizeDecision(context, {
|
|
44
|
+
status: "error",
|
|
45
|
+
activityText: context.transcriptSnapshot?.activityText ?? "Error",
|
|
46
|
+
activityTool: context.transcriptSnapshot?.activityTool ?? "terminal",
|
|
47
|
+
activityPath: context.transcriptSnapshot?.activityPath,
|
|
48
|
+
confidence: 0.92,
|
|
49
|
+
reasons,
|
|
50
|
+
parsedStrongSignal: false
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
if ((0, idleBlockers_1.isPromptDominantOpenCodeIdle)(context)) {
|
|
54
|
+
pushReason({
|
|
55
|
+
code: "opencode-prompt-idle",
|
|
56
|
+
message: "OpenCode prompt is visible without a fresh active execution signal."
|
|
57
|
+
});
|
|
58
|
+
return finalizeDecision(context, {
|
|
59
|
+
status: "idle",
|
|
60
|
+
activityText: undefined,
|
|
61
|
+
activityTool: undefined,
|
|
62
|
+
activityPath: undefined,
|
|
63
|
+
confidence: 0.9,
|
|
64
|
+
reasons,
|
|
65
|
+
parsedStrongSignal: false
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
const parserErrorClassification = (0, parserErrorRules_1.classifyParserError)(context);
|
|
69
|
+
if (parserErrorClassification === "fatal" && transcriptStatus !== "working") {
|
|
70
|
+
pushReason({
|
|
71
|
+
code: "parser-error-signal",
|
|
72
|
+
message: "Recent fatal error pattern detected in terminal output.",
|
|
73
|
+
detail: `${Math.round(context.outputQuietForMs)}ms since output change`
|
|
74
|
+
});
|
|
75
|
+
return finalizeDecision(context, {
|
|
76
|
+
status: "error",
|
|
77
|
+
activityText: context.parsed.activity.text ?? "Error",
|
|
78
|
+
activityTool: context.parsed.activity.tool ?? "terminal",
|
|
79
|
+
activityPath: context.parsed.activity.filePath,
|
|
80
|
+
confidence: 0.87,
|
|
81
|
+
reasons,
|
|
82
|
+
parsedStrongSignal: false
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
if (parserErrorClassification === "recoverable") {
|
|
86
|
+
pushReason({
|
|
87
|
+
code: "parser-recoverable-error",
|
|
88
|
+
message: "Tool-level error detected but considered recoverable.",
|
|
89
|
+
detail: `${Math.round(context.outputQuietForMs)}ms since output change`
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
const evidence = (0, workingEvidence_1.collectWorkingEvidence)(context, parserErrorClassification === "recoverable");
|
|
93
|
+
const idleBlocker = (0, idleBlockers_1.detectIdleBlocker)(context, evidence);
|
|
94
|
+
if (idleBlocker) {
|
|
95
|
+
pushReason(idleBlocker.reason);
|
|
96
|
+
return finalizeDecision(context, {
|
|
97
|
+
status: "idle",
|
|
98
|
+
activityText: undefined,
|
|
99
|
+
activityTool: undefined,
|
|
100
|
+
activityPath: undefined,
|
|
101
|
+
confidence: 0.86,
|
|
102
|
+
reasons,
|
|
103
|
+
parsedStrongSignal: evidence.parsedStrongSignal
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
if (evidence.strongReasons.length > 0) {
|
|
107
|
+
for (const reason of evidence.strongReasons) {
|
|
108
|
+
pushReason(reason);
|
|
109
|
+
}
|
|
110
|
+
const workingActivity = (0, activity_1.resolveWorkingActivity)(context, evidence);
|
|
111
|
+
return finalizeDecision(context, {
|
|
112
|
+
status: "working",
|
|
113
|
+
activityText: workingActivity.activityText,
|
|
114
|
+
activityTool: workingActivity.activityTool,
|
|
115
|
+
activityPath: workingActivity.activityPath,
|
|
116
|
+
confidence: 0.88,
|
|
117
|
+
reasons,
|
|
118
|
+
parsedStrongSignal: evidence.parsedStrongSignal
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
if ((0, workingEvidence_1.shouldKeepStickyWorking)(context, evidence)) {
|
|
122
|
+
pushReason({
|
|
123
|
+
code: "sticky-working-window",
|
|
124
|
+
message: "Keeps working status during a short stabilization window.",
|
|
125
|
+
detail: `${Math.round(context.outputQuietForMs)}ms quiet`
|
|
126
|
+
});
|
|
127
|
+
const workingActivity = (0, activity_1.resolveWorkingActivity)(context, evidence);
|
|
128
|
+
return finalizeDecision(context, {
|
|
129
|
+
status: "working",
|
|
130
|
+
activityText: workingActivity.activityText,
|
|
131
|
+
activityTool: workingActivity.activityTool,
|
|
132
|
+
activityPath: workingActivity.activityPath,
|
|
133
|
+
confidence: 0.66,
|
|
134
|
+
reasons,
|
|
135
|
+
parsedStrongSignal: evidence.parsedStrongSignal
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
if (context.worker.status === "working" &&
|
|
139
|
+
evidence.weakReasons.length > 0 &&
|
|
140
|
+
context.outputQuietForMs <= (0, helpers_1.statusFreshnessWindowMs)(context)) {
|
|
141
|
+
for (const reason of evidence.weakReasons) {
|
|
142
|
+
pushReason(reason);
|
|
143
|
+
}
|
|
144
|
+
pushReason({
|
|
145
|
+
code: "working-evidence-window",
|
|
146
|
+
message: "Keeps working status while weak evidence remains within freshness window.",
|
|
147
|
+
detail: `${Math.round(context.outputQuietForMs)}ms quiet`
|
|
148
|
+
});
|
|
149
|
+
const workingActivity = (0, activity_1.resolveWorkingActivity)(context, evidence);
|
|
150
|
+
return finalizeDecision(context, {
|
|
151
|
+
status: "working",
|
|
152
|
+
activityText: workingActivity.activityText,
|
|
153
|
+
activityTool: workingActivity.activityTool,
|
|
154
|
+
activityPath: workingActivity.activityPath,
|
|
155
|
+
confidence: 0.62,
|
|
156
|
+
reasons,
|
|
157
|
+
parsedStrongSignal: evidence.parsedStrongSignal
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
if (evidence.weakReasons.length > 0) {
|
|
161
|
+
for (const reason of evidence.weakReasons) {
|
|
162
|
+
pushReason(reason);
|
|
163
|
+
}
|
|
164
|
+
if (context.commandQuietForMs <= constants_1.commandWarmupWindowMs) {
|
|
165
|
+
const workingActivity = (0, activity_1.resolveWorkingActivity)(context, evidence);
|
|
166
|
+
return finalizeDecision(context, {
|
|
167
|
+
status: "working",
|
|
168
|
+
activityText: workingActivity.activityText,
|
|
169
|
+
activityTool: workingActivity.activityTool,
|
|
170
|
+
activityPath: workingActivity.activityPath,
|
|
171
|
+
confidence: 0.56,
|
|
172
|
+
reasons,
|
|
173
|
+
parsedStrongSignal: evidence.parsedStrongSignal
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
pushReason({ code: "no-active-evidence", message: "No active work evidence remained within freshness windows." });
|
|
178
|
+
return finalizeDecision(context, {
|
|
179
|
+
status: "idle",
|
|
180
|
+
activityText: undefined,
|
|
181
|
+
activityTool: undefined,
|
|
182
|
+
activityPath: undefined,
|
|
183
|
+
confidence: 0.74,
|
|
184
|
+
reasons,
|
|
185
|
+
parsedStrongSignal: evidence.parsedStrongSignal
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
function finalizeDecision(context, partial) {
|
|
189
|
+
return {
|
|
190
|
+
status: partial.status,
|
|
191
|
+
activityText: partial.status === "idle" ? undefined : partial.activityText,
|
|
192
|
+
activityTool: partial.status === "idle" ? undefined : partial.activityTool,
|
|
193
|
+
activityPath: partial.status === "idle" ? undefined : partial.activityPath,
|
|
194
|
+
confidence: partial.confidence,
|
|
195
|
+
reasons: partial.reasons.length > 0 ? partial.reasons : [{ code: "no-reason", message: "No explicit reason captured." }],
|
|
196
|
+
facts: {
|
|
197
|
+
command: context.currentCommand,
|
|
198
|
+
commandQuietForMs: context.commandQuietForMs,
|
|
199
|
+
outputQuietForMs: context.outputQuietForMs,
|
|
200
|
+
workerAgeMs: context.workerAgeMs,
|
|
201
|
+
isClaudeSession: context.isClaudeSession,
|
|
202
|
+
isOpenCodeSession: context.isOpenCodeSession,
|
|
203
|
+
hasOpenCodePromptSignal: context.hasOpenCodePromptSignal,
|
|
204
|
+
hasOpenCodeActiveSignal: context.hasOpenCodeActiveSignal,
|
|
205
|
+
hasClaudeProgressSignal: context.hasClaudeProgressSignal,
|
|
206
|
+
hasActiveClaudeTask: Boolean(context.activeClaudeTask),
|
|
207
|
+
hasRuntimeActivityText: Boolean(context.runtimeActivityText),
|
|
208
|
+
hasParsedStrongSignal: partial.parsedStrongSignal,
|
|
209
|
+
hasParsedNeedsInput: context.parsed.activity.needsInput,
|
|
210
|
+
hasParsedError: context.parsed.activity.hasError
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
}
|