4 Commits
Author SHA1 Message Date
西风逍遥游 c89d67862e test(devlab): wait for hot-reload watcher 2026-08-25 20:03:32 +08:00
西风逍遥游 7228277392 fix(ci): make DevLab MCP test robust to slow runners
CI hit a python socket timeout connecting to the embedded MCP server,
likely because the sed-triggered hot reload delayed frame-loop MCP pumping
on a slower runner. Bump the socket timeout to 30s, retry eve_status, and
dump the eve log tail on failure so future CI failures carry the actual
engine output.
2026-08-22 00:46:45 +08:00
西风逍遥游 b93247cf5f fix(ci): verify DevLab via MCP instead of grepping captured print
With --debug the engine routes Squirrel print() into the DevTools console,
so 'DevTools attached' never reaches stdout/stderr and the log-grep test
always timed out. The test now starts eve with --mcp-port, waits for the
stderr 'MCP listening' line, and verifies attachment + hot reload through
the embedded MCP server (eve_status attached + eve_eval lab.reloads).
2026-08-21 22:03:31 +08:00
西风逍遥游 f7962f43fe feat(examples): developer-experience and AI-native showcase examples
- devlab: flagship --debug example (console/snapshot/AI panel/pause/hot
  reload/error slice), make devlab target with RUN_ARGS support
- ai-game: agent-drivable live game + agent_demo.py (pause/read/mutate/
  verify/snapshot/restore/screenshot loop)
- ai-editor: headless eve mcp editor host demo (JSON View + ViewModel MVVM)
- examples: fill all missing READMEs + config.nut, add examples/ index
- load.nut: add key_just_pressed/clampf/persist helpers; dedupe 19 examples
- rpg/cardgame: move JSON definitions to data files
- fix eve mcp crash: ModuleManager::requireAll() instantiates modules in
  the headless host (IEditorHost etc. were null)
- graphics: actionable screenshot error when readback was just enabled
- CI: smoke all examples (devlab with --debug) + DevLab hot-reload test

Fixes surfaced by the new CI smoke (examples had never been smoke-tested):
- scene_director kit: camera slot doubled as function + instance and was
  nulled by reset(); move the live Camera3D into cameraObj
- readTextFile used non-existent readn()/len(); use file.read()
  (rpg/cardgame/hex-levels)
- daynight used non-existent keyboard.wasPressed() -> key_just_pressed
- outline passed ints to float-only drawSolidRect; linear-structures
  slider passed an int value
- scene-ecs beginNode() requires (id, name); ai-stage guarded compilestring
- smoke_examples.sh: timeout -k 3 so SIGTERM-ignoring hosts cannot hang CI
2026-08-21 19:18:52 +08:00