#[allow(unused_imports)]
use crate::sync_util::LockExt;
use std::sync::{Arc, Mutex};
use crate::plugin::PluginManager;
use crate::ui::streaming::TokenBatcher;
fn clear_tool_hook_slots(mgr: &mut PluginManager) {
let _ = mgr.eval(
"(do (set harness-block nil) \
(set harness-mutate-input nil) \
(set harness-replace-result nil))",
);
}
pub(crate) fn handle_turn_start(
plugin_manager: Option<&Arc<Mutex<PluginManager>>>,
token_batcher: &mut TokenBatcher,
current_turn_text: &mut String,
current_turn_index: &mut u32,
index: u32,
) {
token_batcher.reset();
current_turn_text.clear();
*current_turn_index = index;
if let Some(pm) = plugin_manager {
let ctx = format!("@{{:index {}}}", index);
crate::ui::phase::spawn_detached_plugin(pm.clone(), "on-turn-start", move |mgr| {
let _ = mgr.dispatch("on-turn-start", &ctx);
clear_tool_hook_slots(mgr);
});
}
}
pub(crate) fn handle_turn_end(
plugin_manager: Option<&Arc<Mutex<PluginManager>>>,
token_batcher: &mut TokenBatcher,
current_turn_text: &str,
index: u32,
) {
if let Some(pm) = plugin_manager {
let flush_partial = token_batcher.flush_remaining().is_some();
let ctx_update = format!(
"@{{:index {} :partial \"{}\"}}",
index,
crate::plugin::escape_janet_string(current_turn_text),
);
let ctx_end = format!(
"@{{:index {} :message \"{}\"}}",
index,
crate::plugin::escape_janet_string(current_turn_text),
);
crate::ui::phase::spawn_detached_plugin(pm.clone(), "on-turn-end", move |mgr| {
if flush_partial {
let _ = mgr.dispatch("on-message-update", &ctx_update);
}
let _ = mgr.dispatch("on-turn-end", &ctx_end);
clear_tool_hook_slots(mgr);
});
}
}