Move the language server into devtools, wire the VS Code extension, and show anonymous closures (eve_update = function) by frame prototype instead of a shifted CallGraph zip.
Co-authored-by: Cursor <cursoragent@cursor.com>
- EVENGINE_ENABLE_STRICT_WARNINGS option: MSVC /W4 /WX, GCC/Clang
-Wall -Wextra -Werror, with documented noise suppressions and
-isystem/-external:I for third-party headers; enabled on the
Windows/Linux debug CI jobs.
- Fix warnings across engine, modules and tests exposed by the gate,
including real bugs (incomplete-type deletes, Timespan microsecond
overflow, overload hiding, enum switch gaps, dead code).
- Add Linux ASan+UBSan job, example smoke step, python-tools test
job, ruff config (scripts+tools), weekly Linux coverage job and a
CodeQL workflow.
Adds 'eve mcp': a desktop-only headless MCP host (stdio by default, --port for TCP, --root for the project). It runs the full runtime, attaches DevTools (eve_eval / eve_run_script / snapshot), and starts the new EditorHost module that renders JSON-defined editor Views (ImGui) bound two-way to Squirrel ViewModel tables (MVVM), persists editors under editors/, and exposes the eve_host_* tool family (apply/state/set_value/events/capture/script/shutdown...). The stdio transport uses a background stdin reader and keeps stdout JSON-RPC-only; script print() is routed to stderr.
Tests: stdio handshake + tools/list round trip, host editor binding (VM<->View sync, set_value -> VM write + onChange events, save/reload persistence). Docs updated (AI与MCP支持.md, 命令行设计.md, tools/eve-mcp README) with the editor JSON protocol and Codex stdio setup.
One-line story -> stage brief (parse_stage) -> creative-brain plan -> build
via scene_director -> scene-qc inspection/fix loop -> report + screenshots.
Reuses the in-repo creative-brain and scene-qc packages; ships a dry-run
in-memory executor and tests, an empty examples/ai-stage host, an openCode
subagent, and the AI场景导演 integration doc that doubles as the
agent-queryable scene-director spec.
config.example.json now maps camera_generate/screenshot/scene_info/
scene_modify to the real engine tools (eve_camera_generate, eve_screenshot,
eve_scene_info, eve_scene_modify). screenshot() reads the engine-written PNG
back to base64 when only a path is returned, so the QC loop works even
though the agent and engine processes may have different cwds; scene_info
also accepts the kit's 'props' geometry format.
The MCP batch driver previously emitted defensive no-op stubs (and used a
{}.fromJson table method that does not exist in Squirrel), so a plan never
actually built a scene. Plan steps now dispatch through
::scene_director.modify with grid->world coordinate conversion, and the kit
is auto-installed before the batch runs.
Self-contained implementation of the ICCV 2025 NormalCrafter algorithm for
generating continuous, flicker-free normal maps from PNG frame sequences.
- server/: FastAPI GPU microservice (single-flight, preloaded model) with the
algorithm reimplemented on stock diffusers (single denoise step + temporal
sliding window + linear blending)
- normal_crafter/: thin CPU client bridging PNG dir <-> video and unpacking the
returned normal PNG ZIP (no torch needed on artist machines)
- Dockerfile + docker-compose for GPU pod deployment
- test/: 9 tests incl. a stub-server end-to-end client flow (no GPU required)
Deployed and tested against llama-server with Qwen2-VL-2B Q4_K_M GGUF.
Fixes found during end-to-end testing:
- Replace hand-written GBNF grammar with llama.cpp json_schema field: the GBNF
literal quote escaping broke across HTTP transport and Chinese enum values
failed to parse; json_schema enforces the same token-level JSON-only output
reliably and handles multi-byte values
- Raise max_tokens 256->512: long FIXED_PROMPT + problem_regions truncated the
reply mid-JSON
- Tune rules: mere road mention no longer implies occlusion (only explicit
blocked/occluded signal -> high); vegetation risk only for clusters, not any
sparse corner tree
- Make FIXED_PROMPT conservative (balanced scene -> 0; empty problem_regions)
Verified live: road-occluded -> risk 3 / review true; clean -> risk 0;
balanced -> 2. 9/9 unit tests pass.
Drop the heavy transformers/torch/bitsandbytes inference path in favour of
llama.cpp llama-server serving a Qwen2-VL-2B GGUF. The service becomes a thin
FastAPI gateway that forwards to the OpenAI-compatible /v1/chat/completions API.
- Add GBNF grammar (grammar.py) that enforces the standard JSON at token
sampling level, making free-text/markdown output impossible
- model.py is now an HTTP client (LlamaServer) over llama-server; no torch
- server.py/__main__.py talk to VISION_PREFILTER_BACKEND (default :8080)
- requirements.txt now only fastapi/uvicorn/pydantic/requests
- Launchers start llama-server + gateway; add download_model.sh (Q4_K_M GGUF)
- README rewritten for the llama.cpp deployment; tests still pass
* feat(animation): add 3D skeletal playback with state machine and motion matching
Extend eve.Animation beyond tweens with AnimSkeleton/AnimClip/AnimPose,
AnimPlayer cross-fade playback, AnimStateMachine (float/bool/trigger),
and MotionDatabase + MotionMatcher feature search. Includes tests and docs.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
* test(animation): Mixamo Idle/Run/Jump fixtures for state machine and motion matching
Import Assimp/ModelData and compact .eva clips; bake planar root motion for
in-place Mixamo run; add integration tests and convert_mixamo tool. Logical
state switches immediately on transition while pose still cross-fades.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
* test(animation): expand state machine and motion matching coverage
Add bool/compound conditions, float ops, trigger consume, player pause,
three-speed matching, EVA round-trip, and Mixamo run-jump-idle / stability
cases after merging main.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
* fix(animation): avoid zeroerr ambiguous || in state machine CHECK
Wrap the compound boolean in parentheses so CHECK does not overload
operator|| against Expression (broke Linux/macOS/Windows CI).
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Expose a localhost MCP JSON-RPC server (--mcp-port) alongside DAP so AI
agents can pause, eval, snapshot, and slice errors on a live session.
Add DevTools AI session log/ImGui panel (eve.dev.ai, F9) and a Cursor
stdio bridge under tools/eve-mcp.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
- Added support for DAP (Debug Adapter Protocol) in the DebugAdapter, allowing for better integration with IDEs like VS Code.
- Implemented new debugging commands: stepInto, stepOver, and stepOut, enhancing script execution control.
- Updated CallGraph to use a fixed ring buffer for event storage, improving performance and memory management.
- Introduced methods for resolving source paths and managing script aliases, facilitating smoother debugging experiences.
- Enhanced documentation to reflect new features and usage instructions for debugging tools.
These changes significantly improve the debugging workflow and provide developers with more robust tools for script management and error tracing.
* feat(devtools): pause, breakpoints, watches, snapshots, and VS Code DAP
Add a script-centric debugger: Pause key / DAP frame pause, Squirrel
breakpoints with watches, JSON snapshot of script state (stateless
engine), TCP Debug Adapter Protocol server, and a VS Code extension
under tools/vscode-eve-debug.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
* fix(devtools): correct Snapshot JSON (Poco Ptr) and DAP includes
Use Poco::JSON::Object/Array::Ptr for script-state capture/restore so
round-trips no longer BadCast; include TimeoutException via Exception.h.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
* fix(devtools): move DebugAdapter ctor to cpp for MSVC unique_ptr
MSVC rejects unique_ptr of forward-declared Poco sockets when the
default constructor is defined in the header (incomplete-type delete).
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
* fix(devtools): disable Poco auto-link on EVDevTools for MSVC
Including Poco Net/JSON without POCO_NO_AUTOMATIC_LIBS makes the
Windows linker request PocoFoundationd.lib instead of PocoFoundationmdd.
Co-authored-by: 西风逍遥游 <sunxfancy@gmail.com>
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>