Preserve Session Zero context across Eve channels

This commit is contained in:
Meta Vens 2026-08-22 12:42:28 +02:00
commit 8cad6b937d
5 changed files with 58 additions and 10 deletions

View file

@ -576,7 +576,7 @@ mod tests {
capable.model = MODEL_CAPABLE.into();
assert_eq!(
openrouter_request_body(&capable, "stealth/ox-alpha")["reasoning"]["effort"],
"high"
"medium"
);
}
@ -852,7 +852,7 @@ fn openrouter_request_body(request: &ModelStageRequest, resolved_model: &str) ->
"messages": [{"role": "user", "content": request.lived_stream}],
"stream": false,
"reasoning": {
"effort": if request.model == MODEL_CAPABLE { "high" } else { "low" },
"effort": if request.model == MODEL_CAPABLE { "medium" } else { "low" },
"exclude": true
}
});

View file

@ -1361,6 +1361,21 @@ fn permitted_dm_context(
});
if channel.kind == SessionZeroChannelKind::PrivateDm {
let member_id = member_id.ok_or_else(|| anyhow!("private member is missing"))?;
let recent_shared_messages = state
.channels
.get("shared:table")
.into_iter()
.flat_map(|shared| shared.message_ids.iter().rev().take(8).rev())
.filter_map(|id| state.messages.get(id))
.map(|message| {
serde_json::json!({
"speaker": message.speaker,
"author_member_id": message.author_member_id,
"text": message.text,
})
})
.collect::<Vec<_>>();
value["recent_shared_messages"] = serde_json::to_value(recent_shared_messages)?;
value["private_character"] = serde_json::to_value(
state
.character_drafts
@ -2804,6 +2819,39 @@ mod tests {
assert_eq!(receipts.len(), 3);
}
#[test]
fn private_dm_context_carries_bounded_public_session_continuity() {
let mut draft = state();
let host_id = draft.host_member_id.clone();
append_message(
&mut draft,
"shared:table".into(),
Some(host_id.clone()),
SessionZeroSpeakerKind::Player,
"The campaign begins in Hellas inside Zhestokost space.".into(),
)
.unwrap();
let private_channel = format!("private:{host_id}");
append_message(
&mut draft,
private_channel.clone(),
Some(host_id.clone()),
SessionZeroSpeakerKind::Player,
"I carry a forged transit credential.".into(),
)
.unwrap();
let context = permitted_dm_context(&draft, &private_channel, Some(&host_id)).unwrap();
let shared = serde_json::to_string(&context["recent_shared_messages"]).unwrap();
assert!(shared.contains("Hellas inside Zhestokost space"));
assert!(!shared.contains("forged transit credential"));
assert!(
serde_json::to_string(&context["recent_messages"])
.unwrap()
.contains("forged transit credential")
);
}
#[tokio::test]
async fn private_channels_and_boundaries_preserve_ownership() {
let dir = tempdir().unwrap();

2
vendor/eve vendored

@ -1 +1 @@
Subproject commit 6b5faa6a77cf59faaa46a2a96ddb3fcadab9c67f
Subproject commit 23eaf32eae76204357c1406b4a7d01bcece6b815

File diff suppressed because one or more lines are too long

2
web/dist/index.html vendored
View file

@ -4,7 +4,7 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Ghostlight Dungeon</title>
<script type="module" crossorigin src="/assets/index-CRfIb_s9.js"></script>
<script type="module" crossorigin src="/assets/index-BAZ19qgm.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-0xx6l_wS.css">
</head>
<body>