feat(runtime): share chat commands and run login sequence

This commit is contained in:
Erik 2026-08-14 20:27:45 +02:00
parent 5535d0adac
commit 41b15efd4d
57 changed files with 1739 additions and 345 deletions

View file

@ -31,7 +31,11 @@ public sealed class HeadlessPluginSessionTests
string statusPath = Path.Combine(temporary.Path, "status.jsonl");
var credential = new HeadlessCredentialSecret("fixture", "password");
using var session = new HeadlessSessionHost(
Descriptor([FixtureId.ToUpperInvariant(), BrokenId], statusPath),
Descriptor(
[FixtureId.ToUpperInvariant(), BrokenId],
statusPath,
loginCommands: ["/"],
loginCommandDelayMs: 0),
credential,
diagnostics,
new FixtureSessionOperations(),
@ -57,7 +61,7 @@ public sealed class HeadlessPluginSessionTests
Assert.Equal(
[
"started", "pluginLoaded", "pluginFailed", "connected",
"characterList", "enteredWorld",
"characterList", "enteredWorld", "loginCommandFailed",
],
EventNames(statuses));
Assert.Equal(FixtureId, statuses[1].GetProperty("plugin").GetString());
@ -66,6 +70,8 @@ public sealed class HeadlessPluginSessionTests
"entry dll not found",
statuses[2].GetProperty("error").GetString()!,
StringComparison.OrdinalIgnoreCase);
Assert.Equal(0, statuses[6].GetProperty("commandIndex").GetInt32());
Assert.Equal("/", statuses[6].GetProperty("command").GetString());
Assert.Contains("fixture-enabled:hasUi=False:entities=0", output.ToString());
WeakReference context = Assert.Single(
@ -231,7 +237,9 @@ public sealed class HeadlessPluginSessionTests
private static HeadlessSessionDescriptor Descriptor(
List<string> plugins,
string statusPath) => new()
string statusPath,
IReadOnlyList<string>? loginCommands = null,
int loginCommandDelayMs = 500) => new()
{
Id = "headless-session",
Endpoint = new HeadlessEndpointDescriptor
@ -255,6 +263,8 @@ public sealed class HeadlessPluginSessionTests
},
Plugins = plugins,
StatusFile = statusPath,
LoginCommands = loginCommands is null ? null : [.. loginCommands],
LoginCommandDelayMs = loginCommandDelayMs,
};
private static WorldSession.EntitySpawn Spawn(uint guid, float x) => new(