2.0.0: slug-based quests, scenarios and offers; environment carried by the token; regenerated models
CI / check (push) Successful in 25s
CI / publish (push) Has been skipped

Claude-Session: https://claude.ai/code/session_01SMCvdwDmuxoaqGgvGBLk1V
This commit is contained in:
edmand46
2026-09-06 22:25:32 +03:00
parent 62025592ba
commit 372ab7cf7e
36 changed files with 138 additions and 90 deletions
+11 -11
View File
@@ -101,7 +101,7 @@ public sealed class EffectsService
var key = (effect.RunId, effect.NodeId);
if (_seen.ContainsKey(key))
continue;
_seen[key] = effect.ScenarioId;
_seen[key] = effect.ScenarioSlug;
if (string.Equals(effect.Type, EffectTypes.Wait, StringComparison.Ordinal))
{
@@ -126,7 +126,7 @@ public sealed class EffectsService
"/sdk/v1/scenarios/callback",
new HandleScenarioCallbackRequest
{
ScenarioId = source.ScenarioId,
ScenarioSlug = source.ScenarioSlug,
NodeId = source.NodeId,
Handle = handle,
RunId = source.RunId
@@ -136,13 +136,13 @@ public sealed class EffectsService
ForgetWait(source.RunId, source.NodeId);
var next = ReadEffect(response?.Effect);
if (next == null)
Emit(OnScenarioCompleted, new ScenarioCompletedEffect(source.RunId, source.ScenarioId));
Emit(OnScenarioCompleted, new ScenarioCompletedEffect(source.RunId, source.ScenarioSlug));
else
Ingest(new[] { next });
}
catch (Exception ex) when (IsDefinitiveRejection(ex))
{
DropRun(source.RunId, source.ScenarioId, source.NodeId, ex);
DropRun(source.RunId, source.ScenarioSlug, source.NodeId, ex);
}
}
@@ -159,7 +159,7 @@ public sealed class EffectsService
"/sdk/v1/scenarios/counter",
new UpdateScenarioCounterRequest
{
ScenarioId = source.ScenarioId,
ScenarioSlug = source.ScenarioSlug,
NodeId = source.NodeId,
CounterKey = counterKey,
Amount = amount,
@@ -173,13 +173,13 @@ public sealed class EffectsService
ForgetWait(source.RunId, source.NodeId);
var next = ReadEffect(response.Effect);
if (next == null)
Emit(OnScenarioCompleted, new ScenarioCompletedEffect(source.RunId, source.ScenarioId));
Emit(OnScenarioCompleted, new ScenarioCompletedEffect(source.RunId, source.ScenarioSlug));
else
Ingest(new[] { next });
}
catch (Exception ex) when (IsDefinitiveRejection(ex))
{
DropRun(source.RunId, source.ScenarioId, source.NodeId, ex);
DropRun(source.RunId, source.ScenarioSlug, source.NodeId, ex);
}
catch (Exception ex)
{
@@ -274,14 +274,14 @@ public sealed class EffectsService
OnScenarioFailed,
new ScenarioFailedEffect(
effect.RunId,
effect.ScenarioId,
effect.ScenarioSlug,
effect.NodeId,
new Exception($"Unsupported scenario node type '{effect.Type}'")));
break;
}
}
private void DropRun(string runId, string scenarioId, string nodeId, Exception exception)
private void DropRun(string runId, string scenarioSlug, string nodeId, Exception exception)
{
lock (_gate)
{
@@ -299,7 +299,7 @@ public sealed class EffectsService
}
}
Emit(OnScenarioFailed, new ScenarioFailedEffect(runId, scenarioId, nodeId, exception));
Emit(OnScenarioFailed, new ScenarioFailedEffect(runId, scenarioSlug, nodeId, exception));
}
private void Reconcile(IEnumerable<PendingEffect>? effects)
@@ -424,7 +424,7 @@ internal sealed class EffectHandle
public string RunId => _effect.RunId;
public string ScenarioId => _effect.ScenarioId;
public string ScenarioSlug => _effect.ScenarioSlug;
public string NodeId => _effect.NodeId;