Conversation
…ring (#9889) * fix(agones-mc): update fleet image to 1.0.1 and wire deployment_yaml - Fleet was still referencing ghcr.io/kbve/mc:1.0.0 (never published), updated to 1.0.1 which CI just built successfully - Added deployment_yaml to mc.mdx so CI post-publish automatically updates the fleet image tag on future version bumps * feat(mc): implement AI Skeleton system — spawn, observe, plan, act - AiSkeletonManager: spawns up to 3 AI Skeletons in starter zone (spawn ± 50 blocks), despawns when no players nearby, tracks entities with monotonic epochs for stale-intent detection - NpcTickHandler: fills in Phase 1 (gather skeleton observations as JSON, submit to Tokio via JNI) and Phase 3 (parse NpcIntent[], validate epoch, apply MoveTo/Attack/Idle/Speak commands) - Skeletons equipped with stone sword, named "AI Skeleton", use Minecraft's pathfinding for MoveTo and tryAttack for combat - Rust behavior tree already handles the AI logic: flee if low HP, attack nearest player in range, wander otherwise * test(mc): add RCON e2e tests for AI Skeleton system - Verify behavior_statetree mod loaded - Check AI Skeleton spawn near world spawn - Validate skeleton equipment (stone sword) - Confirm starter zone config around world spawn - Assert max skeleton count is respected
Contributor
Author
Dependency ReviewThe following issues were found:
Snapshot WarningsEnsure that dependencies are being submitted on PR branches and consider enabling retry-on-snapshot-warnings. See the documentation for more information and troubleshooting advice. License Issuesapps/vm/kubectl/Cargo.toml
packages/rust/bevy/bevy_chat/Cargo.toml
OpenSSF Scorecard
Scanned Files
|
…9892) * feat(discordsh): wire bevy_chat IRC client into bot with graceful degradation (#9850) Connects the Discord bot to the existing ergo IRC server via bevy_chat::ChatClient for cross-platform world events. Gracefully degrades if IRC is unavailable. Startup: - If IRC_HOST is set, attempts ChatClient::from_env() connection - On success: stored as Some(ChatClient) in AppState - On failure: logs warning, stores None — all IRC features silently disabled - If IRC_HOST not set: logs info, skips entirely World event emission (fire-and-forget via tokio::spawn): - Boss killed → #world-events [EVENT:KILL] player defeated boss - Dungeon victory → #world-events [EVENT:VICTORY] player cleared depth N - Player death → #world-events [EVENT:DEATH] player was slain - All events include structured JSON payload for isometric game consumption New module: discord/game/irc_events.rs - emit_boss_killed(), emit_rare_drop(), emit_player_death() - emit_victory(), emit_quest_complete() - Each checks Option<ChatClient>, no-ops on None AppState changes: - new() is now async (for IRC connect) - irc: Option<ChatClient> field added All 701 tests pass (IRC is None in test environment). * feat(bevy_chat): add WASM WebSocket transport for browser IRC clients (#9850) WASM clients (isometric game in browser) can't do raw TCP to ergo. They connect via WebSocket to chat.kbve.com (irc-gateway → ergo:8080). Transport is selected at compile time via cfg(target_arch): - Native (not wasm32): tokio TcpStream → ergo:6667 (unchanged) - WASM (wasm32): web_sys::WebSocket → wss://chat.kbve.com Public API is identical on both platforms: - ChatClient::new(config) / connect() / send() / disconnect() - Native: subscribe() returns broadcast::Receiver (async) - WASM: drain_incoming() returns Vec (polled each frame by Bevy plugin) WASM client features: - Automatic IRC registration on WebSocket open (NICK/USER/JOIN) - PING/PONG keepalive handling - PRIVMSG parsing with structured ChatMessage decode - Closures leaked for WebSocket lifetime (standard WASM pattern) - Non-Send (Rc<RefCell>) — must run on main thread File structure: - client_native.rs — tokio TCP (was client.rs) - client_wasm.rs — web_sys::WebSocket (new) - lib.rs — conditional export based on target_arch Cargo.toml changes: - tokio moved to cfg(not(wasm32)) target dependency - Added wasm-bindgen, web-sys, js-sys as cfg(wasm32) dependencies
* fix(droid): resolve DataCloneError in Dexie BroadcastChannel sync
storeWsMessage stored FlexBuffers-decoded objects directly into Dexie.
toReference().toObject() returns objects containing Uint8Array typed
array views referencing the original ArrayBuffer. Dexie's multi-tab
sync broadcasts changes via BroadcastChannel.postMessage(), which
throws DataCloneError on these typed array views. JSON round-trip
the decoded object before storing to produce a plain cloneable value.
* fix(droid): make ws message storage format-agnostic, fix DataCloneError
storeWsMessage assumed all WebSocket data was FlexBuffers-encoded and
called toReference().toObject(), which returns objects with typed array
views. Dexie's BroadcastChannel multi-tab sync then threw DataCloneError
when trying to postMessage those views.
The ws-worker is protocol-agnostic (IRC text, FlatBuffers, Protobuf)
so the storage layer should be too. Now stores raw bytes as Uint8Array
(natively supported by IndexedDB and BroadcastChannel) and removes the
FlexBuffers decode from the write path. Consumers decode on read using
the appropriate deserializer for their protocol.
* fix(droid): direct ws-worker → db-worker pipeline, fix DataCloneError
Replaced the main-thread bridgeWsToDb pattern with direct worker-to-
worker communication via BroadcastChannel ('kbve_ws_data').
Before: ws-worker → Comlink → main thread → Comlink → db-worker → IDB
After: ws-worker → BroadcastChannel → db-worker → IDB
- ws-worker broadcasts classified messages (text/binary + timestamp)
directly to db-worker, main thread never touches raw data
- db-worker stores raw bytes as Uint8Array (format-agnostic, no
FlexBuffers assumption — supports IRC text, FlatBuffers, Protobuf)
- Removed bridgeWsToDb and unused proxy import from main.ts
- Removed FlexBuffers toReference import from db-worker (was
causing DataCloneError via Dexie BroadcastChannel sync)
Add OSRSLinkTooltip React component (client:idle) that intercepts hover on any element with data-osrs-tooltip attribute inside the panel. Shows item preview with icon, name, relationship badge, and high alch value. Uses @kbve/droid openTooltip/closeTooltip for global state coordination. Add data-osrs-tooltip attributes to: - OSRSRelatedItems links (name, slug, icon, relationship) - OSRSRecipes product links (name, icon, relationship=product) - OSRSRecipes material links (name, icon, relationship=component) Tooltip follows cursor, auto-hides on mouse leave with 100ms debounce.
* fix(mc): resolve JVM GC conflict — disable Aikar flags, use ZGC Aikar flags set G1GC + JVM_XX_OPTS set ZGC = "Multiple garbage collectors selected" crash on startup. Disable Aikar flags and use ZGC with generational mode + tuning flags instead. * fix(mc): enable e2e in CI, add offline mode, detect GC crash early - Set ONLINE_MODE=false in e2e container — no Mojang auth needed - Add early JVM GC conflict detection in wait loop — fails fast instead of waiting 300s for a server that will never start - Enable has_test: true + e2e_name in mc.mdx so CI runs e2e before publishing, preventing broken images from reaching production
…or patch releases.
* feat(kubectl): add Alpine-based kubectl container image (#9809) Alpine 3.21 + kubectl 1.33.2 with sh, curl, wget, jq. Non-root user (uid 65534), drop-ALL-caps safe. Replaces distroless registry.k8s.io/kubectl which lacks /bin/sh for Job scripts. * feat(kubectl): add Rust CLI layer, multi-stage Docker build, MDX page (#9809) Add kbve-kubectl Rust CLI with guest-exec, run, and info subcommands for KubeVirt VM lifecycle management via QEMU Guest Agent. Multi-stage Dockerfile using chisel-ubuntu-axum builder. MDX project page wired for ci-docker pipeline. * refactor(kubectl): switch to chiseled Ubuntu runtime from Alpine (#9809) Replace Alpine runtime with scratch-based chiseled Ubuntu 24.04 using Canonical chisel. Busybox for shell, curl from Ubuntu slice, jq + kubectl as static binaries. Matches the chisel-ubuntu-axum ecosystem pattern. * feat(kubectl-e2e): add e2e test suite for kubectl container image (#9809) Vitest-based e2e tests that build the image, run it, and validate: shell availability, busybox utilities, kubectl, jq, curl, CA certs, kbve-kubectl CLI subcommands (info, run, guest-exec), non-root user. * fix(kubectl): enable e2e testing in MDX pipeline config (#9809) Set has_test: true, e2e_name: kubectl-e2e, test_framework: typescript so ci-docker builds and tests the image before publish. * fix(kubevirt): remove vmx CPU feature blocking macOS VM on AMD host The macos-builder VM was unschedulable because the vmx (Intel VT-x) CPU feature was required but the cluster node is AMD EPYC Rome which exposes svm instead. Also switched evictionStrategy to None for single-node compatibility and aligned runStrategy with windows-builder. * refactor(kubectl): optimize Rust CLI — Cow strings, serde_json payloads, parallel tool checks (#9809) Extract init_tracing(), add kubectl_output() helper with Cow error returns, use serde_json::json! for guest-exec payload (proper escaping), parallelize tool availability checks with futures::join_all, simplify cmd_run match arms. * perf(kubectl): inline hints, drop futures dep, reduce allocations (#9809) - Add #[inline] on init_tracing, kubectl_output, check_tool, cmd_run - Replace futures::join_all with tokio::spawn — drops futures crate (7 sub-crates) from the dependency tree - Hoist TOOLS and VERSION to module-level const - kubectl_output: try String::from_utf8 first to avoid lossy double allocation when output is valid UTF-8 - Extract first_nonempty_line helper for domain parsing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release: Dev → Main
8 atomic commits ready for main
Features
cbc72d6)638dd8b)31e1283)Bug Fixes
067e1c5)6d0f863)Chores
bc091dd)44eb894)212e1e3)This PR is automatically maintained by CI — KBVE Studio