#[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 mut mgr = pm.lock_ignore_poison();
let _ = mgr.dispatch("on-turn-start", &format!("@{{:index {}}}", index));
clear_tool_hook_slots(&mut 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 {
if token_batcher.flush_remaining().is_some() {
let mut mgr = pm.lock_ignore_poison();
let _ = mgr.dispatch(
"on-message-update",
&format!(
"@{{:index {} :partial \"{}\"}}",
index,
crate::plugin::escape_janet_string(current_turn_text),
),
);
}
let mut mgr = pm.lock_ignore_poison();
let _ = mgr.dispatch(
"on-turn-end",
&format!(
"@{{:index {} :message \"{}\"}}",
index,
crate::plugin::escape_janet_string(current_turn_text),
),
);
clear_tool_hook_slots(&mut mgr);
}
}