Skip to content

Commit f439670

Browse files
committed
release: CoreAI 5.6.0
Bump all five packages 5.5.0 -> 5.6.0 in lockstep. Highlights: ApplyToPolicy auto-registration (Build -> Ask just works), shared .editorconfig with attributes-per-line, XML/WHY/TODO/HACK comment convention applied across the core, native vertical benchmark comparison chart, G7 drops its screenshot. AgentBuilder EditMode test updated for the auto-register behavior (57 targeted EditMode tests green).
1 parent 48b4e4d commit f439670

8 files changed

Lines changed: 38 additions & 16 deletions

File tree

Assets/CoreAI/CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,16 @@
22

33
## [Unreleased]
44

5+
## 5.6.0 - Simpler agent API, code-style rules, benchmark comparison (2026-07-11)
6+
7+
- **Code style: shared `.editorconfig` + comment convention.** Attributes now always sit on their own
8+
line (`resharper_place_attribute_on_same_line = never`; 208 existing one-line attributes split). Comments
9+
keep only XML docs plus explicitly-tagged `// WHY:` / `// TODO:` / `// HACK:`; obvious restate-the-code
10+
comments and section-divider banners were stripped across the core. See `CONTRIBUTING.md`.
11+
- **Benchmark: native vertical model-comparison chart.** The frontier chart is now produced by the
12+
benchmark's own `Build Model Comparison Report` (vertical bars, 8 models ranked best-first) and rendered
13+
to PNG so GitHub shows it. A note marks the Claude rows as understated (a non-native, unstable API gave
14+
them a high tool-failure rate, so their scores are a lower bound).
515
- **`AgentBuilder`: `ApplyToPolicy` is now optional.** `AskAsync`/`AskWithCallback` auto-register the built
616
`AgentConfig` with the global `CoreAIAgent.Policy` on first use, so the newcomer flow is just `Build()`
717
`Ask*()` — no manual `ApplyToPolicy(CoreAIAgent.Policy)` step. The explicit call is still available for

Assets/CoreAI/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "com.neoxider.coreai",
3-
"version": "5.5.0",
3+
"version": "5.6.0",
44
"displayName": "CoreAI",
55
"unity": "6000.0",
66
"description": "Portable C# core for CoreAI \u2014 LLM agents that call your game code. Orchestration, function-calling tools, agent memory, AgentBuilder, SkillSet, and production resilience (retries, timeouts, rate limits), with no UnityEngine dependency. LLM and Lua are optional modules (COREAI_NO_LLM / COREAI_NO_LUA), so the core compiles without them \u2014 install only what your game uses. Unity integration ships in com.neoxider.coreaiunity.",
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "com.neoxider.coreaibenchmark",
3-
"version": "5.5.0",
3+
"version": "5.6.0",
44
"displayName": "CoreAI Benchmark",
55
"unity": "6000.0",
66
"description": "LLM game-creation benchmark harness and scenarios for CoreAI: drives execute_lua and world_command through real PlayMode scenarios (G1-G8), grades tool correctness, reasoning, instruction adherence, and determinism, and reports suite/role fitness scores. Depends on com.neoxider.coreai / com.neoxider.coreaiunity / com.neoxider.coreaimods.",
@@ -11,8 +11,8 @@
1111
"license": "PolyForm-Noncommercial-1.0.0",
1212
"licensesUrl": "https://github.com/NeoXider/CoreAI/blob/main/LICENSE",
1313
"dependencies": {
14-
"com.neoxider.coreai": "5.5.0",
15-
"com.neoxider.coreaiunity": "5.5.0",
16-
"com.neoxider.coreaimods": "5.5.0"
14+
"com.neoxider.coreai": "5.6.0",
15+
"com.neoxider.coreaiunity": "5.6.0",
16+
"com.neoxider.coreaimods": "5.6.0"
1717
}
1818
}

Assets/CoreAIHub/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "com.neoxider.coreaihub",
3-
"version": "5.5.0",
3+
"version": "5.6.0",
44
"displayName": "CoreAI Hub (UI Toolkit)",
55
"unity": "6000.0",
66
"description": "Optional UI Toolkit window for CoreAI: a tabbed Hub that renders pages registered into CoreAI's HubPageRegistry (Chat, Settings, Statistics, Mods, and C#/Lua-authored pages). Lazy per-tab content, live tab rebuild on register/unregister, semi-transparent runtime panel, and a future path to Unity 6.5 world-space PanelRenderer. Install this package only when you want the built-in Hub window; without it CoreAI still exposes the registry so you can render pages on your own uGUI/UITK canvas via the API. Depends on com.neoxider.coreai.",
@@ -11,7 +11,7 @@
1111
"license": "PolyForm-Noncommercial-1.0.0",
1212
"licensesUrl": "https://github.com/NeoXider/CoreAI/blob/main/LICENSE",
1313
"dependencies": {
14-
"com.neoxider.coreai": "5.5.0",
15-
"com.neoxider.coreaiunity": "5.5.0"
14+
"com.neoxider.coreai": "5.6.0",
15+
"com.neoxider.coreaiunity": "5.6.0"
1616
}
1717
}

Assets/CoreAIMods/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "com.neoxider.coreaimods",
3-
"version": "5.5.0",
3+
"version": "5.6.0",
44
"displayName": "CoreAI Mods (Lua)",
55
"unity": "6000.0",
66
"description": "Lua modding layer for CoreAI: the Lua-CSharp sandbox (managed, AOT-safe, WebGL/IL2CPP-ready — bundled, no external package), execute_lua and manage_mods tools, the Lua Modding skill, the mod runtime, persistent mod stores, gameplay bindings, and mod UI. Depends on com.neoxider.coreai / com.neoxider.coreaiunity. Install this package only when you want AI/player-authored Lua mods; without it CoreAI compiles Lua-free.",
@@ -11,7 +11,7 @@
1111
"license": "PolyForm-Noncommercial-1.0.0",
1212
"licensesUrl": "https://github.com/NeoXider/CoreAI/blob/main/LICENSE",
1313
"dependencies": {
14-
"com.neoxider.coreai": "5.5.0",
15-
"com.neoxider.coreaiunity": "5.5.0"
14+
"com.neoxider.coreai": "5.6.0",
15+
"com.neoxider.coreaiunity": "5.6.0"
1616
}
1717
}

Assets/CoreAiUnity/CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,15 @@ Unity host: **CoreAI.Source** build, EditMode / PlayMode tests, Editor menus, do
44

55
## [Unreleased]
66

7+
## 5.6.0 - Simpler agent API, code-style rules, benchmark comparison (2026-07-11)
8+
9+
- **`ApplyToPolicy` is now optional.** `AskAsync`/`AskWithCallback` auto-register the built `AgentConfig`
10+
with the global `CoreAIAgent.Policy` on first use, so the newcomer flow is just `Build()``Ask*()`.
11+
- **Code style + comments.** Shared `.editorconfig` (attributes on their own line); obvious comments stripped
12+
and genuine ones tagged `// WHY:` / `// TODO:` / `// HACK:` across the core host source.
13+
- **Benchmark: G7 stops capturing a scene screenshot** (unreadable composite; G6 stays the only hero image),
14+
and the frontier comparison chart is now the benchmark's own vertical bar chart rendered to PNG.
15+
716
- **Structured world spawning.** Added `worldPositionStays` to `world_command` `spawn`, `spawn_batch`, and
817
`change`. The default is `false`, so parented position/rotation values are local; `true` preserves the
918
world transform. Batch items can override the call-level default. Tool guidance now recommends named

Assets/CoreAiUnity/Tests/EditMode/AgentBuilderEditModeTests.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,11 @@ public void BuildDetached_DoesNotMutateGlobalPolicy()
6565
}
6666

6767
[Test]
68-
public async Task AskAsync_Fails_WhenRoleNotRegistered()
68+
public async Task AskAsync_Fails_WhenCoreAiNotInitialized()
6969
{
70+
// With auto-registration, an unregistered role no longer fails on "not registered" — the first
71+
// Ask registers it into the global policy. It still fails when CoreAI itself was never
72+
// initialized (no policy), with a message that points at the missing lifetime scope.
7073
CoreAIAgent.Reset();
7174
AgentConfig config = new AgentBuilder("UnregisteredAgent")
7275
.WithSystemPrompt("You are unregistered.")
@@ -83,7 +86,7 @@ public async Task AskAsync_Fails_WhenRoleNotRegistered()
8386
}
8487

8588
Assert.NotNull(ex, "expected InvalidOperationException");
86-
StringAssert.Contains("not registered", ex.Message);
89+
StringAssert.Contains("Initialize CoreAI", ex.Message);
8790
}
8891

8992
[Test]
@@ -95,7 +98,7 @@ public void AskWithCallback_DoesNotThrow_AndLegacyAskIsObsolete()
9598
.BuildDetached();
9699

97100
// Fire-and-forget convenience must never throw into the caller; failures are logged.
98-
// Silence the logger so the expected "not registered" error does not trip Unity's
101+
// Silence the logger so the expected "not initialized" error does not trip Unity's
99102
// log assertions in EditMode.
100103
Logging.ILog savedLog = Logging.Log.Instance;
101104
Logging.Log.Instance = Logging.NullLog.Instance;

Assets/CoreAiUnity/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "com.neoxider.coreaiunity",
3-
"version": "5.5.0",
3+
"version": "5.6.0",
44
"displayName": "CoreAI Unity",
55
"unity": "6000.0",
66
"description": "Unity framework for LLM-powered NPCs and agents that call your game code \u2014 drop-in chat UI, function-calling tools, persistent memory, token-by-token streaming, and per-role LLM routing. Runs on a local GGUF model (via LLMUnity) or any OpenAI-compatible API; proven on a 4 GB local model. Unity layer for com.neoxider.coreai.",
@@ -11,6 +11,6 @@
1111
"license": "PolyForm-Noncommercial-1.0.0",
1212
"licensesUrl": "https://github.com/NeoXider/CoreAI/blob/main/LICENSE",
1313
"dependencies": {
14-
"com.neoxider.coreai": "5.5.0"
14+
"com.neoxider.coreai": "5.6.0"
1515
}
1616
}

0 commit comments

Comments
 (0)